【发布时间】:2011-01-02 06:31:49
【问题描述】:
这个问题已经被问到here,但不是回答具体问题,而是描述了装饰器模式的工作原理。我想再问一次,因为仅仅通过阅读装饰器模式的工作原理,我并不能立即得到答案(我已经阅读了维基百科的文章和 Head First Design Patterns 一书中的部分)。
基本上,我想知道为什么必须创建一个抽象装饰器类来实现(或扩展)某些接口(或抽象类)。为什么所有新的“装饰类”都不能简单地实现(或扩展)基本抽象对象本身(而不是扩展抽象装饰器类)?
为了更具体,我将使用设计模式书中处理咖啡饮料的示例:
- 有一个抽象组件类叫做
Beverage - 简单的饮料类型如
HouseBlend只需扩展Beverage - 为了装饰饮料,创建了一个抽象的
CondimentDecorator类,它扩展了Beverage,并有一个Beverage的实例 - 假设我们要添加“牛奶”调味品,创建一个扩展
CondimentDecorator的类Milk
我想了解为什么我们需要CondimentDecorator 类以及为什么Milk 类不能简单地扩展Beverage 类本身并在其构造函数中传递Beverage 的实例。
希望这很清楚......如果不是我只是想知道为什么这个模式需要抽象装饰器类?谢谢。
编辑:我尝试实现这一点,省略了抽象装饰器类,它似乎仍然有效。这个抽象类出现在这个模式的所有描述中,仅仅是因为它为所有新的装饰类提供了一个标准接口吗?
【问题讨论】:
标签: java design-patterns oop decorator