《设计模式解析》摘录(11)

Decorator 模式

    Decorator 模式的工作原理:可以创建始于 Decorator 对象(复杂新功能的对象)终于原对象的一个对象“链”。

    每条链都始于一个 Component(ConcreteComponent 或 Decorator)。每个 Decorator 对象后面都跟着另一个 Decorator 对象或原 ConcreteComponent 对象。对象链总是终于一个 ConcreteComponent 对象。

    Decorator 模式帮助我们将问题分为两个部分:

    1、如何实现提供新功能的对象;

    2、如何为每种特殊情况组织对象。

     这样能够将 Decorator 对象的实现与决定如何使用 Decorator 对象的对象分离开来,从而提供了内聚性,因为每个 Decorator 对象只用关心自己添加的功能——无需关心自己如何被添加到对象链中。这还使我们能够任意地重排 Decorator 的顺序,无需改变其他的任何代码。

    Decorator 模式要求对象链的实例化与使用它的 Client 对象完全分离开。最典型的实现是通过使用工厂对象,根据某些配置信息实例化对象链。

关键特征:

    意图:动态地给一个对象添加职责;

    问题:要使用的对象将执行所需的基本功能。但是,可能需要为这个对象将添加某些功能,这项附加功能可能发生在对象的基础功能之前或之后;

    解决方案:可以无需创建子类,而扩展一个对象的功能;

    参与者与协作者:ConcreteComponent 让 Decorator 对象为自己添加功能。有时候用 ConcreteComponent 的派生类提供核心功能,在这种情况下 ConcreteComponent 类就不再是具体的,而是抽象的。Component 类定义了所有这些类所使用的接口。

    效果:所添加的功能放在小对象中。好处是可以在 ConcreteComponent 对象的功能之前或之后动态添加功能。虽然装饰对象可以在被装饰对象之前或之后动态添加功能,但对象链总是终于 ConcreteComponent 对象。

    实现:创建一个抽象类来表示原类和要添加到这个类的新功能。在装饰类中,将对新功能的调用放在对紧随其后对象的调用之前或之后,以获得正确的顺序。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值