设计模式学习之装饰者模式(Decorator)
作用:假设我们有一个使用了八个对象的程序,由于需求变更,其中三个对象需要另外一个属性。读者可以为这三个对象创建一个派生类,在多数情况下,这是一个完全可以接受的方案。然而,如果这三个对象中的每个对象都要求有不同的属性,这就意味着要创建三个派生类。更进一步,如果其中一个类具有其他两个类中的属性,可能就要创建更复杂的类,这既容易造成混乱也没有必要————装饰者模式给我们提供了这样一个方法:改变单个对象的行为,而不需要创建一个新的派生类
实现要点:继承和聚合。
UML图和代码:参看http://terrylee.cnblogs.com/archive/2006/03/01/340592.html的写Log的例子,讲的很好,我觉得自己写一个还不如直接照搬TerryLeee的了O(∩_∩)O哈哈~
我只想记一下 装饰者模式和桥接模式(Bridge)的区别:
诚如GOF所说:“这些(设计模式)之间存在着本质上的相似性”——大多数人可能也意识到了,反正我是觉得GOF把设计模式分为23种实在是有点分得太细了(难道是为了给出版社凑足页数?),搞得现在很多人没事干就去研究某某设计模式与某某设计模式的区别。呜呼哀哉!设计模式本身的目的是为了解决问题,而不是留下来做理论研究。只要解决了问题,没必要探寻到底属于那一种设计模式吧。
话归正题,小区别肯定是有的,仔细看桥接模式和装饰者模式的UML图,我的理解:前者是分离+聚合,后者是继承+聚合。前者是分离出抽象的东西当作新类,然后用聚合来满足扩展,后者则是先继承,然后用聚合来扩展和增强原来的类