简介
装饰器模式可以在对象的外部,动态地扩展对象的功能。
扩展对象的功能,通常有三种方式:
- 直接修改类
- 通过创建派生类来扩展既有类的功能
- 使用组合的方式
在面向对象编程中,应该优先使用组合,而不是继承。装饰模式也采用组合的方式来扩展对象的功能。
角色
- 抽象组件角色
为所有具体组件角色定义公共接口 - 具体组件角色
继承或实现抽象组件角色。具体组件对象是要被装饰的对象 - 抽象装饰器角色
为所有具体装饰器角色定义公共接口。装饰器对象需要保存组件对象的引用,如果装饰器不继承组件,那么只能扩展单一功能。即装饰器对象不能装饰其它装饰器对象(通俗点地说,就是装饰器对象不能嵌套) - 具体装饰器角色
实现抽象装饰器角色
UML 类图