关于Decorator的心得,求探讨
我觉得在Decorator模式中,如果实现装饰的Decorator只有一个的话,也就是说,只要给Decoratee增加一个工能的话,使用Decorator的优势并不是很大,Decorator模式的真正的威力在于对于一个被装饰(被油漆)的Decoratee提供多个Decorator的时候,也就是说,有多个额外的功能要被动态的刷到Decoratee中去,而这些功能在编译阶段并不能确定要具体增加那一些,而且增加的这些功能还有可能通过不同的组合完成不同的功能,这个时候使用Decorator模式的优势就很大了.比如下面几行代码中:
A a = new Decorator1 ( new Decorator2() );
a.doSomething();
A b = new Decorator2 ( new Decorator1() );
b.doSomething() ;
a.doSomething()和b.doSomething()完成的功能就可以完全不一样,如果不止两个Decorator的话,这样的组合就更多,通过不同的组合提供不同的功能就很简单了.我看到很多讲Decorator的例子基本上都是基于一个Decorator来给Decoratee刷上增值功能,<java 与模式>里的那个发票的例子讲得比较好,它通过两个Decoratoe(HeaderDecorator和FooterDecorator)来为同一个Decoratee(SalesOrder)提供不同的功能.大家可以参考探讨一下.