架构与模式程序员

Decorator 装饰者模式

2017-11-26  本文已影响60人  holysu

动机

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

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

目的

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

实现

decorator-uml

装饰者模式中个组件:

描述

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

例子 - 动态扩展图形窗口

decorator - window

相关模式

总结

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

上一篇 下一篇

猜你喜欢

热点阅读