装饰者模式

面临问题:

要使用的对象将执行所需的基本功能。但是,在这些基本功能确定以后,可能需要为这个对象添加一些其他附加功能,并且对于不同的情况可能添加附加功能的种类和数量都是不确定的。

也就是说如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展化”所导致的影响将为最低?

解决方案:

通过添加装饰类,而不是扩展子类,在运行时为基本类对象扩充功能。



 Component
定义一个对象接口,可以给这些对象动态地添加职责
 ConcreteComponent
定义一个对象,可以给这个对象添加一些职责,也就是可以给这个对象进行装饰。
 Decorator
维持一个指向Component对象的指针,并定义一个与
Component接口一致的接口
 ConcreteDecorator
向组件添加职责

因为在ConcreteDecorator的对象中,构造函数中包含了component对象传进来一个参数。自己的属性中也有component的定义。所以在ConcreteDecorator实现operation方法中,自己的行为再加上传入的component对象的行为,才是这个operation方法的实现。

对一个component对象一步步进行装饰完之后,调用最后的方法时候,会一步步回调回去。例如计算价格等等。看不懂的可以参考head first 设计模式 98页。


装饰者模式通过继承统一了装饰者和被装饰者的接口,通过聚合获得了在运行时动态扩展被装饰者对象的能力。

通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象。符合结构型模式!!


相关的模式

Adapter:Decorator模式中装饰仅改变对象的职责而不改变它的接口,而Adapter模式中适配器将给对象一个全新的接口
Composite:可以将装饰视为一个退化的仅有一个组件的组合,Decorator的目的不在于对象聚集
Strategy:用一个装饰可以改变对象的外表,而Strategy模式可以改变对象的内核


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值