当前位置: 首页 > news >正文

设计模式之装饰者模式

文章の目录

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


一、什么是装饰者模式

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

装饰者模式有以下特点:

  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^)\\\~~~
谢谢各位读者们啦(^_^)∠※!!!

http://www.lryc.cn/news/13370.html

相关文章:

  • 【第31天】SQL进阶-写优化- 插入优化(SQL 小虚竹)
  • SpringBoot自动装配的原理
  • Vue3电商项目实战-分类模块5【12-二级类目-结果区-排序组件、13-二级类目-结果区-数据加载、14-二级类目-结果区-进行筛选】
  • 计算机操作系统概述
  • 面试官让你说说react状态管理?
  • CUDA线程块的分配
  • 史密斯圆图
  • Spring国际化实现
  • 10- 天猫用户复购预测 (机器学习集成算法) (项目十) *
  • 对于《MySQL 实战45讲》的理解
  • XQuery 函数
  • Elasticsearch的安装及常用操作
  • 网络安全应急响应服务方案怎么写?包含哪些阶段?一文带你了解!
  • 11、事务原理和实战,MVCC
  • Robust Self-Augmentation for Named Entity Recognition with Meta Reweighting
  • Java基础-xml
  • TCP的Nagle算法和delayed ack---延时发送和延时应答与稍带应答选项
  • 智能拣配单解决方案
  • 如何防御入侵服务器
  • [软件工程导论(第六版)]第4章 形式化说明技术(课后习题详解)
  • Premiere基础操作
  • Prometheus监控案例-tomcat、mysql、redis、haproxy、nginx
  • 如何寻找SAP中的增强
  • 算法刷题打卡第95天: 最大平均通过率
  • Springboot扩展点系列之终结篇:Bean的生命周期
  • OnGUI Color 控件||Unity 3D GUI 简介||OnGUI TextField 控件
  • 【日刻一诗】
  • 设计模式 状态机
  • React源码分析(二)渲染机制
  • Object.defineProperty 和 Proxy 的区别