类图
代码
1 | interface Component{ |
1 | class ConcreteComponent implements Component{ |
1 | class Decorator implements Component{ |
1 | class ConcreteDecorator extends Decorator{ |
测试类
1 | class ConcreteDecorator extends Decorator{ |
结果
1 | 操作前 |
总结
概述
1.什么时候使用装饰者
需要扩展一个类的功能,或给一个类添加附加职责
2.实际场景的使用者
Java中的InputStream,FilterInputStream,BufferedInputStream大量使用了装饰者模式
优点
- 相对于继承,可以提供更多的灵活性扩展类的功能
- 通过不同的装饰方法,可以创造出很多不同行为的组合
缺点
- 会相对引入较多的子类,增加系统的复杂度
- 装饰者模式会面对Component进行操作的,如果原系统中操作是针对ConcreteComponent的,那么将变的不适用