1 意图:动态地给一个对象添加一些额外的职责。就增长功能来讲,Decorator模式相比生成子类更灵活。app
2 别名:包装器Wrapper指针
3 动机:将组件嵌入到另外一个对象中,由这个对象添加边框。嵌入的对象叫作装饰。装饰的接口与所装饰的组件接口一致,所以对客户透明。对象
因为透明,能够递归嵌套多个装饰,添加任意多的功能。继承
4 适用性:递归
. 不影响其余对象的状况下,以动态、透明的方式给单个对象添加职责。接口
. 处理那些能够撤销的职责it
. 当不能采用生成子类的方式扩充时。大量独立的扩展,为支持每一种组合将产生大量的子类。扩展
一种状况,有大量独立的扩展,为支持每一种组合将产生大量子类,子类数目爆炸性增加。请求
另外一种状况,由于类定义被隐藏,类定义不能生成子类。co
5 参与者:
. Component 定义一个对象接口,能够给这些对象动态添加职责
. ConcreteComponent:定义一个对象,给这个对象添加一些职责
. Decrator:为之一个指向Component对象的指针,定义一个与Component接口一致的接口。
. ConcreteDecrator:向组件添加职责
6 协做:
Decorator将请求转发给它的Component对象,并有可能在转发请求先后执行一些附加的动做。
7 效果:
优势:
1)比静态继承更灵活
2)避免在层次结构高层的类有太多的特征
3)Decorator与Component不同
4)有许多小对象
8 实现:
1)接口的一致性
2)省略抽象的Decorator
3)保持Component类的简单性
4)改变对象外壳与改变对象内核
9 相关模式:
. Adapter只改变接口,Decorator仅改变职责
. Composite模式:可将装饰视为只有一个退化的、仅有一个组件的组合。
. Strategy改变对象的内核, Decorator改变对象的外壳