装饰器模式:为什么我们需要一个抽象的装饰器?
这个问题已经在这里提出来了,但不是回答具体问题,而是给出了装饰器图案如何工作的描述。我想再问一次,因为仅仅通过阅读装饰器模式的工作原理,答案对我来说并不明显(我已经阅读了维基百科文章和“Head First Design Patterns”一书中的部分)。
基本上,我想知道为什么必须创建一个抽象装饰器类来实现(或扩展)某些接口(或抽象类)。为什么所有新的“装饰类”都不能简单地实现(或扩展)基本抽象对象本身(而不是扩展抽象装饰器类)?
为了使这一点更加具体,我将使用处理咖啡饮料的设计模式书中的示例:
- 有一个抽象组件类,称为
Beverage
- 简单的饮料类型,如简单地扩展
HouseBlend
Beverage
- 为了装饰饮料,创建了一个抽象类,该类扩展并具有
CondimentDecorator
Beverage
Beverage
- 假设我们想添加一个“牛奶”调味品,创建了一个类,该类扩展了
Milk
CondimentDecorator
我想理解为什么我们需要这个类,为什么这个类不能简单地扩展类本身,并在它的构造函数中传递一个实例。CondimentDecorator
Milk
Beverage
Beverage
希望这很清楚...如果不是我只是想知道为什么抽象装饰器类对于这个模式是必要的?谢谢。
编辑:我试图实现这个,省略了抽象装饰器类,它似乎仍然有效。此抽象类是否存在于此模式的所有描述中,仅仅是因为它为所有新的修饰类提供了标准接口?