TypeScript设计模式(4):装饰器模式

什么是装饰器模式?

装饰器模式 (Decorator Pattern) 是一种设计模式,允许在不修改原有类代码的前提下,通过装饰方式来扩展它的功能。在 TypeScript 中,我们可以利用装饰器函数来实现这一点。

装饰器模式的优点

  • 增量原有类的功能而不修改它的代码
  • 可以通过层层闭包来组合功能
  • 提高代码的重用性和可维护性

TypeScript 中装饰器的基本用法

TypeScript 支持使用 装饰器 (装饰器函数) 来扩展类、方法、属性和参数。装饰器实际上是一个函数,它可以将一个类或方法作为参数,并返回修改后的值。

简单例子

typescript 复制代码
function Logger(target: Function) {
  console.log(`类 ${target.name} 被创建`);
}

@Logger
class Person {
  constructor() {
    console.log("Person 实例创建");
  }
}

const p = new Person();

在此例子中, @Logger 装饰器会在 Person 类创建时被调用,它相当于对 Person 类进行了一次处理。

装饰器传递参数

typescript 复制代码
function WithTemplate(template: string, hookId: string) {
  return function (constructor: any) {
    const hookElement = document.getElementById(hookId);
    if (hookElement) {
      hookElement.innerHTML = template;
    }
  };
}

@WithTemplate("<h1>你好,TypeScript!</h1>", "app")
class App {}

这里的 WithTemplate 装饰器会将指定的 HTML 模板添加到 DOM 元素中。

方法装饰器

typescript 复制代码
function LogMethod(target: any, methodName: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;
  descriptor.value = function (...args: any[]) {
    console.log(`调用 ${methodName} 方法,参数:`, args);
    return originalMethod.apply(this, args);
  };
}

class Car {
  @LogMethod
  drive(speed: number) {
    console.log(`驾驶速度:${speed}`);
  }
}

const car = new Car();
car.drive(100);

这里的 @LogMethod 装饰器在每次调用 drive 方法时输出方法名和参数信息。

结论

装饰器模式是一种强大而很有用的模式,在 TypeScript 中,我们可以使用它来扩展类、方法和属性的功能而不需要修改源代码。这样能很好地提高代码的重用性和维护性。

相关推荐
geovindu11 小时前
rust: Semaphore Pattern
开发语言·后端·设计模式·rust·代理模式·企业级信号量模式·同步型模式
是2的10次方啊11 小时前
设计模式与生活⑧:快递到了,别一直刷物流
设计模式
raindayinrain2 天前
c++设计模式
开发语言·c++·设计模式
工一木子2 天前
设计模式与生活⑦:你打的车,隔着一个平台
设计模式
电子科技圈2 天前
2026 RISC-V中国峰会观察:编译调试工具链的“在场节奏”,释放了什么信号?
大数据·人工智能·设计模式·软件工程·软件构建·代码规范·risc-v
电子科技圈2 天前
Arm电机控制开发工具哪家强?
arm开发·单片机·嵌入式硬件·设计模式·软件构建
是2的10次方啊3 天前
设计模式与生活⑦:你打的车,隔着一个平台
设计模式
geovindu3 天前
rust: Read-Write Lock Pattern
开发语言·后端·设计模式·rust·读写锁模式·同步型模式
工一木子3 天前
设计模式与生活⑤:天冷了,给电动车套件挡风被
设计模式
是2的10次方啊4 天前
设计模式与生活⑥:问题一个个砸过来,先写张便签
设计模式