关于Decorator模式
Decorator模式本身较好理解,从他的别名可见一斑:Wrapper。
Decorator用于动态地给对象添加一些额外的职责,注意:此处是给对象,而不是给类,这正式该模式灵活的地方。你可以给一个对象嵌套一个或人一个多个Decorator。
下面我们主要要看一下Decorator和Strategy的区别。
Decorator模式仅从外部改变组建,因此组件无需对它的装饰有任何了解,也就是说,这些装饰对组件来说是透明的,组件对装饰一无所知,如图1所示。
图1 Decorator模式
在Strategy模式中,component组建本身知道可能进行哪些扩充,因此它必须引用并维护相应的策略。如图2所示。
图2 Strategy模式
基于strategy模式的方法可能需要修改component组件以适应新的扩充。另一方面,一个策略可以有自己特定的接口,而装饰的接口则必须与组件的接口一致。
在Decorator中,保持接口的简单性非常重要。Decorator中的Component应集中于定义接口而不是存储数据,对数据的表示应该延迟到子类中。否则component类会变得过于复杂和庞大,因而难以大量使用。赋予component太多的功能也使用具体的子类有一些他们并不需要的功能的可能性大大增加。
Decorator的灵活性使得他可以用于定义那些可以撤销的职责。因为职责都是动态的,添加和撤销都一样的方便。