一、概念
1、定义:装饰者模式动态地将“责任”附加到对象上。对于扩展功能,装饰者提供了比继承更有弹性的替代方案
2、类型:结构型
3、三个要素:主题(被装饰的)、装饰、委托
4、适用情况
星巴兹咖啡的例子,很多具体类来继承一个抽象类导致类爆炸
5、UML
装饰者和被装饰者必须是一样的类型,它们继承了共同的超类,这是关键,利用继承获得了类型匹配,而不是继承它的行为,行为是来自装饰者自身以及其他的基础组件,或者是装饰者-装饰者之间的组合关系。
PS:图中最顶部component类型是抽象类,当然java中也可以使用接口