为什么80%的码农都做不了架构师?>>>   

装饰者是一种实现继承的替代方案。当脚本运行时,在子类中增加行为会影响原有类所有的实例,而装饰者却不然。取而代之的是它能给不同对象各自添加新行为。

//需要装饰的类(函数)
function Macbook() {this.cost = function () {return 1000;};
}function Memory(macbook) {this.cost = function () {return macbook.cost() + 75;};
}function BlurayDrive(macbook) {this.cost = function () {return macbook.cost() + 300;};
}function Insurance(macbook) {this.cost = function () {return macbook.cost() + 250;};
}// 用法
var myMacbook = new Insurance(new BlurayDrive(new Memory(new Macbook())));
console.log(myMacbook.cost());

优点是把类(函数)的核心职责和装饰功能区分开了。

转载于:https://my.oschina.net/shyl/blog/678742

javascript的装饰者模式(七)相关推荐

  1. php和python对比-PHP、Python和Javascript的装饰器模式对比

    修饰模式(Decorator Pattern),又叫装饰者模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式.就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个 ...

  2. 《JavaScript设计模式与开发实践》模式篇(12)—— 装饰者模式

    在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活, 还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之 改变;另一方面,继承这种功能复 ...

  3. JavaScript装饰器模式

    装饰器模式 适配器模式是原来的接口就不能用了,需要做一个适配之后才能继续使用. 装饰器是原先接口还能用,在此基础上添加一些新功能.(为对象添加新功能,并且不改变原有结构和功能) 下面我们来举一个装饰器 ...

  4. javascript设计模式之装饰器模式(结构型模式)

    javascript设计模式之装饰器模式 js的设计模式分为创建型模式,结构型模式和行为模式 结构模式描述了如何组合对象以提供新的功能. 装饰器模式是一种常见的结构型模式,我们可以以一个基础对象为基础 ...

  5. JavaScript设计模式(三):结构型设计模式-外观模式、适配器模式、代理模式、装饰者模式、桥接模式、组合模式、享元模式

    JavaScript设计模式 - 结构型设计模式 套餐服务-外观模式 外观模式(Facade) 水管弯弯-适配器模式 适配器模式(Adapter) 适配异类框架 参数适配 牛郎织女-代理模式 代理模式 ...

  6. 从王者荣耀看设计模式(七.装饰者模式)

    ##从王者荣耀看设计模式(装饰者模式) 一.简介 王者荣耀中,角色的"伤害值"和"生命值"是很重要的概念.为了保证游戏的胜利,玩家会通过在游戏开始前配置合适的游 ...

  7. (设计模式七)java设计模式之装饰器模式

    一.简介: 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类 ...

  8. 大聪明教你学Java设计模式 | 第七篇:装饰器模式

    前言 大聪明在写代码的过程中发现设计模式的影子是无处不在,设计模式也是软件开发人员在软件开发过程中面临的一般问题的解决方案.大聪明本着"独乐乐不如众乐乐"的宗旨与大家分享一下设计模 ...

  9. JavaScript初学者应注意的七个细节

    每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的.本文利列举了JavaScript初学 ...

最新文章

  1. JSP/Servlet基础语法
  2. spring-mvc里的 mvc:resources 及静态资源访问
  3. 从底层重学 Java 之四大整数 GitChat链接
  4. python中赋值语句_python中赋值语句和增强赋值语句的区别
  5. Directx11教程40 纹理映射(10)
  6. matlab除与左除,Matlab左除和右除
  7. 联想ts250进bios_联想Think TS250/TS550安装server 2008 R2/2012系统教程【一】
  8. 逆向之汇编(堆栈平衡函数)
  9. 微信语音技术原理_玩人工智能的你必须知道的语音识别技术原理
  10. Sensor感应器介绍
  11. 电脑连接热点无internet访问权限_电脑连接手机热点无法上网的三种解决方法
  12. 网站被攻击如何修复网站漏洞
  13. 【python小技巧】 批量将.png格式图片转换为.jpg格式图片
  14. 微软怎么设计Exchange 2003的体系结构
  15. c语言程序负数,C程序,检查数字是正数还是负数
  16. python技巧:如何使用Python对音频进行特征提取?
  17. 剪辑视频调整视频播放倍速,改变视频时长
  18. 笔记本电脑 Windows 10 中启用和禁用触摸屏
  19. cookie session的设置
  20. wpl计算方法_已知权值集合为{5,7,2,3,6,1,4},计算带权路径长度WPL()。

热门文章

  1. typeScript模块四
  2. Swift WKWebView读取本地html
  3. dubbo报错Data length too large: 10710120处理,及服务提供者协议配置详细说明
  4. GDB 修改当前判断函数的返回值(即修改寄存器的值)的方法
  5. 转: Executor类
  6. 病毒加壳技术与脱壳杀毒方法解析
  7. 设置ComboBox控件的小箭头颜色.
  8. IOS选中按钮状态的记录
  9. base64链接转为地址php,php将图片链接转换为base64编码文件流
  10. 则执行C语言语句unsigned,部分C语言题目