描述
定义
动态地给一个对象添加一些额外的职责,其别名为包装器(Wrapper)。就增加对象功能来说,装饰器模式比生成子类实现更为灵活。
类型
对象结构型模式
UML类图
时序图
特点
- 装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
- 大多数的装饰模式实际上是半透明的装饰模式,即允许增加新的方法。半透明的装饰模式是介于装饰器模式和适配器模式之间的。
实现
主要角色
- Component:抽象接口,以规范准备接收附加责任的类;
- ConcreteComponent:目标实现类,定义一个将要接收附加责任的实现类;
- Decorator:装饰器抽象类,持有一个构件(Component)对象的实例,将请求转发给它的Component对象(可能在转发请求前后执行一些附加的动作),实现一个与抽象构件接口一致的接口。
- ConcreteDecorator:装饰器实现类,负责给构件对象“贴上”附加的责任;
注意事项
- 接口的一致性:装饰对象的接口必须与它所装饰的Component的接口是一致的;
- 省略抽象的Decorator类:当你仅需要添加一个职责时,没有必要定义抽象Decorator类,这时可以把Decorator合并到ConcreteDecorator中;
- 保持Component类的简单性:为了保证接口的一致性,组件和装饰必须有一个公共的Component父类,保持公共父类的简单性是很重要的;
- 改变对象外壳与改变对象内核:将Decorator看作一个对象的外壳,它可以改变这个对象的行为。另外一种方法是