概念
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构性模式,它是作为现有类的一个包装
这种模式创建了一个装饰类,用来包装原有的类,并在保持类名方法签名完整的情况下,提供了额外的功能。主要是在不改变原有对象的基础上,通过对其进行拓展(添加属性或者方法)使原有对象可以满足用户的更复杂需求
实现一个装饰器
定一个class类-Log
需求1:要求输出形式为[123]的结果,而且不能改变原有的print方法
方法:利用装饰器模式,给Log的print方法加一层拦截
需求2:要求输出形式为**123**或者--123--的结果
方法:结合工厂函数使得dec函数被迫升阶
TS中的装饰器语法
首先,js中也是可以使用装饰器语法的,同ts一样,在tsconfig.json或者jsconfig.json文件中开启compilerOptions选项下的experimentalDecorators设置为true即可,如下图:
然后实现一个装饰器语法:
其中decorate参数descriptor.value指的是@decorate后面的print方法,descriptor类似于Object.defineProperty(obj, prop, descriptor)方法里的descriptor差不多,指的是属性描述符
还可以在改造结合工厂函数模式