装饰模式
1、解决什么问题?
在修车厂里,有各种各样的汽车,奔驰、宝马、奥迪、卡迪拉克、丰田。当我们为这些汽车喷漆时,我们通常都是在喷漆车间为汽车喷漆,而不是为每种车型各自搞一个喷漆车间。
将上述问题转换到软件设计中,有奔驰、宝马、奥迪、卡迪拉克、丰田五个品牌类。当它们需要增加喷漆的方法时,为了保持单一职责,最直接的方法就是分别继承这五个品牌类来实现喷漆功能,如此以来就相当于增加了五个喷漆车间,这显然是不合理的!汽车保养店的老板当然不会傻到这种地步,因为只需要搞一个喷漆车间就够了(忽略排队等待喷漆的时间),这种省钱的方式就是装饰模式。
2、什么是装饰模式?
对已经存在的某些类进行装饰,以此来扩展一些功能。
3、UML图
装饰模式包含如下角色:
- Component :抽象构件角色
- ConcreteComponent:具体构件角色(相当于奔驰、宝马、奥迪等品牌)
- Decorator:装饰角色
- ConcreteComponent:具体装饰角色(喷漆车间)
4、使用场景
- IO输入输出流设计
- servlet中request对象的各种包装设计