适用场景
- 最大的作用:不想或者不能改变原有的类,而给原有类扩展功能
这就是「装饰者模式」,在不必改变原类文件(英雄类)和使用继承的情况下,动态地扩展一个对象(李白)的功能。它是通过创建一个包装对象(buff类:红buff,篮buff, ...),也就是装饰来包裹真实的对象。
比如新增一个大小写转换的InputStream装饰所有的InputStream,不可能直接在InputStream中增加方法,而是可以使用装饰者模式。
特点
- 装饰类是继承(或实现)构件类的,让人看起来装饰类就是构件类本身一样(都是Component的子类,只不过其成员变量是Component的子类,作为构造参数的入参),甚至分不出来它是装饰类
UML图