[Design] Decorator Pattern
结构模式
结构模式描述如何将类或者类的对象结合在一起形成更大的结构。
结构模式描述两种不同的东西:类与类的实例。结构模式可以分为:类的结构模式和对象的结构模式两种。
类的结构模式:类的结构模式使用继承来把类、接口等组合在一起,以形成更大的结构。类的结构模式是静态的,比如类形式的适配器模式。
对象的结构模式:对象的结构模式描述怎么样把不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。比如代理人模式。
--------------------------------------------------------------------------------------
装饰(Decorator)模式
装饰模式又名包装模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一种替代方案。装饰模式使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展是完全透明的。
使用情况
1. 需要扩展一个类的功能,或给一个类增加附加责任。
2.需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
优点
装饰模式与继承关系的目的都是扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。
通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。
缺点
比继承关系需要较少数目的类,但会产生更多的对象,使得查错变得困难,特别是这些对象看上去都很像。
――――――――――――――――――
装饰模式和适配器模式都有一个别名,即包装模式,但是这两个模式是很不一样的。适配器模式的用意是要改变所考虑的对象的接口而不一定改变对象的性能,而装饰模式的用意是要保持接口,从而增加所考虑对象的性能。
结构及角色
1. 抽象构件角色
给出一个抽象接口,以规范准备接收附加责任的对象。
2. 具体构件角色
定义一个将要接收附加责任的对象。
3. 装饰角色
持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口。
4. 具体装饰角色
负责给构件对象“贴上”附加的责任。