动态的给对象增加一些新的行为。
使用继承虽然也可以实现,但是比较臃肿,没有装饰模式灵活。而且降低了类与类的直接的关系。
模式结构
- Component: 抽象构建
- ConcreteComponent: 具体的抽象构建
- Decorator:抽象装饰类(增加一层这个,这样具体的装饰者内部每次就不用在 定义 抽象对象变量,直接super(),初始父类对象就行了)
- ConcreteDecorator: 具体的装饰者
优缺点
- 优点
0、装饰者和被装饰者 可以独立扩展,互不影响。
0、动态的扩展一个类的功能
- 缺点
多层装饰比较复杂
使用场景
- 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
- 当不能使用继承或者 使用继承难为维护是可以是使用 【装饰器】(1-使用final,2-使用继承会导致子类的数量爆炸行增长)
其他
- 扩展对象的功能为什么不使用继承
参考链接1:blog.csdn.net/qq_27093465…
参考链接2 www.cnblogs.com/JMLiu/p/808…
- 代码