> 文章列表 > 设计模式之装饰者模式

设计模式之装饰者模式

设计模式之装饰者模式

文章の目录

  • 一、什么是装饰者模式
  • 二、优势
  • 三、缺点
  • 四、应用场景
  • 五、示例
  • 参考
  • 写在最后

一、什么是装饰者模式

装饰者模式也称为包装器模式,在不改变原有对象的基础上为其动态的添加上新的功能。

装饰者模式有以下特点:

  1. 添加功能时不改变原对象结构。
  2. 装饰对象和原对象提供的接口相同,方便按照源对象的接口来使用装饰对象。
  3. 装饰对象中包含原对象的引用。即装饰对象是真正的原对象包装后的对象。
    实际上,装饰着模式的一个比较方便的特征在于其预期行为的可定制和可配置特性。从只有基本功能的普通对象开始,不断增强对象的一些功能,并按照顺序进行装饰。

二、优势

装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

三、缺点

多层装饰比较复杂。

四、应用场景

  1. 扩展一个类的功能。
  2. 动态增加功能,动态撤销。

五、示例

给release方法添加Hurt方法

function Hurt() {console.log("造成100点伤害");
}
class Yase {constructor() {this.name = "亚瑟";}release() {console.log("释放技能");}
}
Function.prototype.Decorator = function (fn) {this();fn();
};
let yase = new Yase();
// 装饰 对于原本类没有更改
yase.release.Decorator(Hurt);

装饰者链

Function.prototype.Decorator = function (fn) {let _this = this;return function () {// console.log("111",fn);_this();fn();};
};
// 装饰者链
yase.release.Decorator(Hurt).Decorator(Hurt).Decorator(Hurt).Decorator(Hurt)();

参考

  1. 【JS】167-JavaScript设计模式——装饰者模式
  2. js中的设计模式之装饰者模式

写在最后

如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果你觉得该文章有一点点用处,可以给作者点个赞;\\\\*^o^*//
如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L~~~///(^v^)\\\\\\~~~
谢谢各位读者们啦(^_^)∠※!!!