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)模式

    装饰者(Decorator)模式装饰模式又名包装(Wrapper)模式。装饰模式是继承关系的一个替代方案。装饰模式...

  • 装饰者模式和代理模式

    装饰者模式和代理模式 装饰者模式 名称:Decorator 分类:结构型模式 意图:动态的为目标对象增加功能,比继...

  • 设计模式之装饰器模式

    也称装饰者模式、装饰器模式、Wrapper、Decorator。 装饰模式是一种结构型设计模式,允许你通过将对象放...

  • Java23种设计模式之结构型模式「装饰器模式」

    装饰器模式 - Decorator Pattern 装饰器模式(Decorator Pattern)允许向一个现有...

  • 装饰者模式

    一、装饰者模式概述-Decorator 装饰者模式是动态地给一个对象添加一些额外的职责。想要扩展功能,装饰者模式提...

  • 【设计模式笔记】(十九)- 装饰者模式

    简述 装饰者模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),以透明动态...

  • 装饰器模式和代理模式的区别

    这两个设计模式看起来很像:对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一...

  • 装饰者模式(Decorator)

    定义动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现...

  • 装饰者模式(Decorator)

    统一接口 提供一个同一的接口同目标对象与装饰对象实现 目标对象 目标对象包装类 在调用目标对象业务方法前后,可以有...

  • Decorator(装饰者模式)

    原文 别名 包装器 目的 动态地向一个对象添加额外职责,装饰模式提供了相对子类更加灵活的添加功能方式。 解释 真实...

网友评论

    本文标题:Decorator 装饰者模式

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