装饰器模式通过元编程动态扩展对象功能,如在JavaScript中使用类装饰器记录类创建、方法装饰器添加日志,实现权限校验、性能监控等横切关注点,无需修改原有代码。
装饰器模式是一种在不修改原有代码的前提下,动态扩展对象功能的设计模式。在 JavaScript 中,借助 ES6 的类和 TypeScript 提供的装饰器语法(目前处于提案阶段,但广泛用于框架如 Angular),我们可以非常直观地实现类与方法的装饰。这种模式特别适用于日志记录、权限校验、性能监控等横切关注点。
类装饰器接收构造函数作为唯一参数,可以用来监听、修改或替换类的定义。
例如,我们想为某个类标记其是否已启用,可以通过类装饰器实现:
function logClass(target: Function) {当定义 Person 类时,装饰器会立即执行,输出“类已创建: Person”。这适合做注册、元数据注入或行为拦截。
方法装饰器应用于类的方法,它接收三个参数:目标对象、方法名、属性描述符。通过修改描述符,可以改变方法的行为。
常见的使用场景包括防抖、日志追踪、权限检查等。
function readonly(target: any, key: string, descriptor: PropertyDescriptor) {
t: any, key: string, descriptor: PropertyDescriptor) {上述代码中,@log 装饰器包裹了 add 方法,在调用前后打印日志,而不会影响原有逻辑。这种方式解耦了业务代码与辅助功能。
装饰器非常适合处理重复性的横切逻辑。以下是几个实用方向:
注意:原生 JavaScript 尚未正式支持装饰器,需通过 Babel 或 TypeScript 编译转换。使用时应确保构建工具配置正确。
基本上就这些。掌握装饰器模式后,你会发现很多原本需要侵入式修改的地方,现在都能优雅解决。关键是理解它如何通过元编程改变行为,而不是直接改动实现。