意图:为一个对象动态连接附加的职责。
问题:你需要使用的对象执行你要求的基本功能。但是,你可能需要为这个对象添加某些功能。这些附加功能可能发生在对象的基础功能之前或之后。请注意,Java基础类在I/O处理中广泛使用了Decorator模式。
解决方案:允许扩展一个对象的功能,而不必借助于子类型化。
参与者与协作者:Decorator对象为ConcreteComponent添加功能。有时候ConcreteComponent的派生类被用于提供核心功能,在这种情况下ConcreteComponent类就不再是具体的,而是抽象的。Component类定义了所有这些类使用的接口。
效果:被添加的功能属于小的对象。好处是可以在ConcreteComponent对象的功能之前或之后动态添加功能。注意:虽然一个装饰者可以在被装饰者之前或之后添加功能,但对象链总是以ConcreteComponent对象结束。
实现:创建一个抽象类来表示原始的类和要添加到这个类上的新功能。在装饰者类中,将“对新功能的调用”放在“对紧随其后对象的调用”之前或之后,以获得正确的顺序。
参考这篇文章就行了,http://www.jdon.com/designpatterns/decorator.htm
decorator就是一种包装,有一个核心的inner component,然后还有一个包装用的outer component,
调用outer component时,除了调用inner component 的方法外,还有一些在outer component 的修饰方法也被调用了
这样可以减少大量的类,比如我要把 {红色,蓝色,绿色} {木头,金属} {圆,方}这三种属性进行组合就需要12个不同的类
如果用decorator就是7种,如果组合更多,效果就更加明显了