目录
[显示]

1.摘要

Decorator模式维护一个单路的嵌套关系,利用这种关系可以实现函数的递归调用。这种递归方式可以动态地给一个对象添加一些额外的职责,就扩展功能而言, 它比生成子类方式更为灵活。

2. 针对问题

有时我们希望给某个类增加一些功能。这时有两个选择:
1、继承这个类并实现一个派生类,在派生类中编写新的功能逻辑,这样做的主要问题是一个功能就需要对应一个派生类,多层继承时类的数量会成倍增长。
2、使用对象的组合,将新的功能委托给别的对象实现,并提供一致的调用接口。Decorator模式便是这种思路的一个实现方式。

3. 介绍

动态地给一个对象添加一些额外的职责。就扩展功能而言, 它比生成子类方式更为灵活。

4. 实现

Decorator模式的静态图如下:

Decorator模式维护一个单路的层级关系,Decorator与Component需要有共同的接口。可以认为是一个新的Decorator“包裹”了旧的对象,在将调用转发给旧对象后实现Decorator自己的逻辑功能,如下图:

可以看出Decorator模式与Composite模式的实现方式非常相似,这两种模式的主要区别是Decorator模式只需要维护一个component节点,这也体现了这两种模式的区别:Composite模式侧重于对象结构的维护,Decorator模式侧重于转发请求时增加其他功能。

5. 特点

1、Decorator模式通过将原有类型的逻辑分离到共同接口的类型中,实现了动态增加对象功能。
2、被装饰的类型和Decorator类型在类层次上是平级的,也就是说,被装饰的类型的特有操作不能被装饰。

6. 相关文章

设计模式总结

7. 参考文章

  1. 《设计模式_可复用面向对象软件的基础》,