装饰器模式(包装模式):Decorator(Wrapper) Pattern、结构型模式
装饰器模式在不改变原有对象的基础上,将功能附加到对象上,提供比继承更有弹性的替代方案。
装饰器模式核心在于 功能扩展
装饰器模式应用场景
1、用于扩展一个类的功能或者给一个类添加附加职责
2、动态给类添加功能,动态撤销功能
ps:装饰器模式强调自身功能的扩展;代理模式强调对代理过程的控制。
装饰器模式的优缺点
优点:
1、装饰器模式是继承的有力补充,比继承灵活,不改变原有对象情况下动态给一个对象进行功能扩展,即插即用。
2、完全遵守开闭原则,通过不同的装饰类排列组合,可以实现不同的效果
缺点:
1、会出现更多的代码,增加类的个数,增加程序的复杂性
2、进行动态装饰时,多层嵌套装饰会更复杂。
装饰器模式源码应用
1、JDK的IO类: BufferedReader、InputStream、OutputStream
2、Spring中的 TransactionAwareCacheDecorator
3、Spring MVC中的 HttpHeadResponseDecorator