标签:
模块模式:
富有弹性的继承的替代方案, 通过重载方法的形式向基本对象装饰属性或者方法;
不严重依赖创建对象的方式,只关注扩展额外功能(但这些额外的功能并不是必要的,不然就被合并到基本对象中了)。
和子类化的区别:
通过重载方法的形式向基本对象装饰属性或者方法;
而子类中添加行为会影响原有类所有实例,装饰者模式不会;
比较精简。
优点:
相当灵活,重用性高;
对象可以被新行为包装,然后继续被使用,不会修改基本对象。
实现继承的替代方案,给不同对象添加各自的新行为。
缺点:
管理不当会极大地复杂化应用程序架构;
碰到不知道这种模式的开发人员可能难以理解为什么使用这么多对象。
相关模式:
该模式经常和组合模式 一起使用,它们通常有一个公共的父类(也就是原型),因此装饰必须支持具有add、remove、getChild操作的 component接口。
参考:https://github.com/tcorral/Design-Patterns-in-Javascript/blob/master/Composite/index.html
代码例子:
示例1:
示例2:
一句话总结:
黑色头发染成棕色(新生出来的头发还是黑色的,没有改变原来对象)
标签:
原文地址:http://my.oschina.net/Karon/blog/499862