装饰器模式:为什么需要抽象装饰器?
基本上,我想知道为什么必须创建一个抽象装饰器类来实现(或扩展)某些接口(或抽象类)。为什么所有新的“装饰类”都不能简单地实现(或扩展)基本抽象对象本身(而不是扩展抽象装饰器类)?
为了更具体一点,我将使用设计模式书中涉及咖啡饮料的示例:
- 有一个称为的抽象组件类
Beverage
- 简单的饮料类型,例如
HouseBlend
简单扩展Beverage
- 为了装饰饮料,
CondimentDecorator
创建了一个抽象类,该类扩展Beverage
并具有Beverage
- 假设我们要添加“牛奶”调味品,将
Milk
创建一个扩展CondimentDecorator
我想了解为什么我们需要CondimentDecorator
该类,以及为什么该类Milk
不能简单地扩展Beverage
类本身并Beverage
在其构造函数中传递一个实例。
希望这很清楚… 如果不是, 我只是想知道 ?谢谢。
编辑:我试图实现这一点,省略了抽象装饰器类,它 似乎
仍然可以工作。这个抽象类是否在此模式的所有描述中都存在,仅仅是因为它为所有新装饰的类提供了标准接口?
回答:
它使您可以使用各种装饰器以不同的组合独立地装饰基类,而不必为每种可能的组合派生一个类。例如,假设您要Beverage
搭配牛奶和肉豆蔻。使用基于抽象装饰器类的装饰器,您只需使用Milk
和Nutmeg
装饰器进行包装即可。如果它是从派生的Beverage
,则必须有一个MilkWithNutmegBeverage
类,一个MilkBeverage
类和一个NutmegBeverage
类。您可以想象一下,随着可能的组合数量的增加,这种爆炸式增长。使用抽象装饰器实现可将其减少为每个装饰仅一个装饰器类实现。
以上是 装饰器模式:为什么需要抽象装饰器? 的全部内容, 来源链接: utcz.com/qa/423254.html