Java 类库中采用了大量设计模式,其中IO类库中使用了装饰者模式。
装饰模式(Decorator) ,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。(《设计模式》 )
类图如下:
其中:
Component:定义一个对象接口,可以给这些对象动态地添加职责。
ConcreteComponent:定义一个对象,可以给这个对象添加一些职责。
Decorator:维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
ConcreteDecorator:向组件添加职责。
Decorator将请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作。
看起来比较抽象,举几个例子:
打印发票(抬头脚注装饰正文)
游戏武器(宝石装饰武器)
饮料(调料装饰饮料)
控件(边框或滚动条装饰文本框)
穿衣服(衣服装饰人)