一、意图
装饰者模式(又称装饰模式、包装(Wrapper)模式):动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
二、适用性
以下情况使用Decorator模式(摘自《设计模式》):
• 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
• 处理那些可以撤消的职责。
• 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
三、组成
——抽象构件角色(Component)
给出一个个抽象接口,以规范准备接收附加责任的对象。是被装饰类和装饰类的父接口。
——具体构建角色(Concrete Component)
定义一个将要接受附加责任的类,即被装饰的类。
——装饰角色(Decorator)