Decorator 装饰者模式

作者: holysu | 来源:发表于2017-11-26 14:46 被阅读60次

    动机

    我们可以通过继承来静态地(在编译期间)扩展对象的功能,不过有时我们也需要在使用对象的时候动态地(在运行时)扩展它 。

    我来看一个经典的例子,图形窗口。比如说我们要扩展这个图形窗口的功能,给窗口加上一个框,那么我们得建一个 FramedWindow 类。要新建一个带框窗口,需要创建一个 FramedWindow 的实例。然而,如果如果我们从一个简单的窗口开始,然后在运行时对其进行扩展使之成为一个带框的窗口,这就不可能实现了。

    目的

    这个模式的目的是动态地给对象附加功能

    实现

    decorator-uml

    装饰者模式中个组件:

    • Component - 可动态添加职责的对象,职责可包括状态也可包括行为
    • ConcreteComponent - 将附加功能扩展的目标对象
    • Decorator - 维护一个 Component 对象的引用,并且定义一个和 Component 接口一致的接口
    • Concret Decorator - 具体装饰者,通过增加状态和行为扩展 Component 对象的功能

    描述

    装饰者对象适用于需要动态添加或删除一个类的功能的时候;也适用于无法使用子类扩展功能的时候,因为其会导致巨多子类产生。

    例子 - 动态扩展图形窗口

    decorator - window

    相关模式

    • Adapter Pattern - 装饰者模式改变对象的职责,而适配器模式改变的是对象的接口
    • Composite Pattern - 装饰者模式可以看做是只有一个部件的子组合, 不过,装饰者模式还增加了额外的功能。

    总结

    • 装饰者模式比用直接用整个类来扩展对象功能来的更方便。装饰者模式也使我们动态的删除已添加的功能成为可能
    • 不过装饰者模式动态地给对象附加功能会加大系统功能测试难度

    示例:https://github.com/minorpoet/design-patterns/tree/master/decorator
    总目录:http://www.jianshu.com/p/af861220a6cc

    相关文章

      网友评论

        本文标题:Decorator 装饰者模式

        本文链接:https://www.haomeiwen.com/subject/aibiuxtx.html