彻底搞懂设计模式DesignPattern-装饰者模式

装饰者模式

定义

  1. 装饰者模式: 动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)
  2. 这里提到的动态的将新功能附加到对象和ocp原则,在后面的应用实例上会以代码的形式体现,请同学们注意体会。

装饰者模式原理

  1. 装饰者模式就像打包一个快递
    主体: 比如:陶瓷、衣服 (Component) // 被装饰者
    包装:比如:报纸填充、塑料泡沫、纸板、木板(Decorator)
  2. Component
    主体:比如类似前面的Drink
  3. ConcreteComponent和Decorator
    ConcreteComponent:具体的主体,比如前面的各个单品咖啡
    Decorator: 装饰者,比如各调料.
  4. 在如图的Component与ConcreteComponent之间,如果ConcreteComponent类很多,还可以设计一个缓冲层,将共有的部分提取出来,
    抽象层一个类。

UML图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

JDK应用的源码分析装饰者模式在JDK应用的源码分析

适用场景

装饰者模式是以对客户端透明的方式扩展对象的功能,是继承关系的一种替代方案!
以下情况可以考虑是想用对象组合(组合与委托):

在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;

处理那些可以撤消的职责;

当不能采用生成子类的方法进行扩充时:一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类;

优缺点

扩展对象功能,比继承灵活,不会导致类个数急剧增加;
可以通过一种动态的方式在运行时选择不同的具体装饰类,从而实现不同的行为;
避免了高层次类有太多的特征,可以从一个最简单的类慢慢给他添加功能;
会产生很多小装饰者对象,会影响性能,过多使用该模式也会使程序变得复杂。

代码示例

码云地址https://gitee.com/magneto/codeReview/tree/master/DesignPattern/src/pro51/top/adapter

微信
微信

个人网站
http://www.51pro.top
网站
公众号
公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值