本文共 659 字,大约阅读时间需要 2 分钟。
在不必改变原类文件和使用继承的情况下,动态地扩展一个对
象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
- 需要扩展一个类的功能,或给一个类添加附加职责。
- 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。
- 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。
- 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
装饰模式实现的原理在于Decorator类可以包含一个Component组件,使得修饰器本身和另一个组件组合起来(这就是为什么Decorator要组合Compoent),同时产生的新组件也需要是一个Component组件才能使得这个组合能够被其他组件组合(这就是为什么Decorator要继承Compoent)。每个Decorator都需要一个Component组件来修饰(你不能没有任何对象就来组合/修饰吧,就像玩乐高积木一样,你要本来就有一块积木,才用另一块积木来组合/修饰它),所以这里又有一个核心组件ConcreteComponent提供一个第一个而且是核心的具体组件,没有核心组件是无法使用Decorator修饰器来合成/修饰生成新的组件。
这里有一个博文写的很好很详细,参考一下:
链接: 作者: 果冻想转载地址:http://knyii.baihongyu.com/