2021-03-31 浅谈设计模式之装饰器

147 阅读1分钟

概念

装饰器模式(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差不多,指的是属性描述符

还可以在改造结合工厂函数模式