装饰器模式:为什么需要抽象装饰器?

基本上,我想知道为什么必须创建一个抽象装饰器类来实现(或扩展)某些接口(或抽象类)。为什么所有新的“装饰类”都不能简单地实现(或扩展)基本抽象对象本身(而不是扩展抽象装饰器类)?

为了更具体一点,我将使用设计模式书中涉及咖啡饮料的示例:

  • 有一个称为的抽象组件类 Beverage
  • 简单的饮料类型,例如HouseBlend简单扩展Beverage
  • 为了装饰饮料,CondimentDecorator创建了一个抽象类,该类扩展Beverage并具有Beverage
  • 假设我们要添加“牛奶”调味品,将Milk创建一个扩展CondimentDecorator

我想了解为什么我们需要CondimentDecorator该类,以及为什么该类Milk不能简单地扩展Beverage类本身并Beverage在其构造函数中传递一个实例。

希望这很清楚… 如果不是, 我只是想知道 ?谢谢。

编辑:我试图实现这一点,省略了抽象装饰器类,它 似乎

仍然可以工作。这个抽象类是否在此模式的所有描述中都存在,仅仅是因为它为所有新装饰的类提供了标准接口?

回答:

它使您可以使用各种装饰器以不同的组合独立地装饰基类,而不必为每种可能的组合派生一个类。例如,假设您要Beverage搭配牛奶和肉豆蔻。使用基于抽象装饰器类的装饰器,您只需使用MilkNutmeg装饰器进行包装即可。如果它是从派生的Beverage,则必须有一个MilkWithNutmegBeverage类,一个MilkBeverage类和一个NutmegBeverage类。您可以想象一下,随着可能的组合数量的增加,这种爆炸式增长。使用抽象装饰器实现可将其减少为每个装饰仅一个装饰器类实现。

以上是 装饰器模式:为什么需要抽象装饰器? 的全部内容, 来源链接: utcz.com/qa/423254.html

回到顶部