彻底搞懂设计模式DesignPattern-装饰者模式
装饰者模式
定义
- 装饰者模式: 动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)
- 这里提到的动态的将新功能附加到对象和ocp原则,在后面的应用实例上会以代码的形式体现,请同学们注意体会。
装饰者模式原理
- 装饰者模式就像打包一个快递
主体: 比如:陶瓷、衣服 (Component) // 被装饰者
包装:比如:报纸填充、塑料泡沫、纸板、木板(Decorator) - Component
主体:比如类似前面的Drink - ConcreteComponent和Decorator
ConcreteComponent:具体的主体,比如前面的各个单品咖啡
Decorator: 装饰者,比如各调料. - 在如图的Component与ConcreteComponent之间,如果ConcreteComponent类很多,还可以设计一个缓冲层,将共有的部分提取出来,
抽象层一个类。
UML图
JDK应用的源码分析
适用场景
装饰者模式是以对客户端透明的方式扩展对象的功能,是继承关系的一种替代方案!
以下情况可以考虑是想用对象组合(组合与委托):
在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;
处理那些可以撤消的职责;
当不能采用生成子类的方法进行扩充时:一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类;
优缺点
扩展对象功能,比继承灵活,不会导致类个数急剧增加;
可以通过一种动态的方式在运行时选择不同的具体装饰类,从而实现不同的行为;
避免了高层次类有太多的特征,可以从一个最简单的类慢慢给他添加功能;
会产生很多小装饰者对象,会影响性能,过多使用该模式也会使程序变得复杂。
代码示例
码云地址https://gitee.com/magneto/codeReview/tree/master/DesignPattern/src/pro51/top/adapter
微信
个人网站
http://www.51pro.top
公众号