针对问题

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

介绍

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

实现

Decorator模式的静态图如下:

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

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