将实例变量移动到装饰器模式中的抽象类的原因是什么?

hamena314

在关于装饰器模式的章节中的“ Head First设计模式(2014年,第二版)”一书中,作者Beverage beverage从4个调味品类(牛奶,摩卡,大豆,鞭子)中提取了实例变量,并将其放入抽象类中CondimentDecorator(请参见第110页,-问题的解决方案getSize()

public abstract class CondimentDecorator extends Beverage{
  public Beverage beverage;
  public abstract String getDescription();

  public Size getSize(){
    return beverage.getSize();
  }
}

将实例变量Beverage beverage从调味品类移动到抽象类的原因是CondimentDecorator什么?

他们这样做是为了节省一些代码行,因为现在调味品不需要声明自己的实例变量,因为它们是从抽象类继承来的?

咖啡店的UML图在它们移动实例变量之前:

咖啡厅的UML

jaco0646

与减少代码大小相比,更重要的是,将Beverage实例移至CondimentDecorator每个实例中CondimentDecorator实际上都具有一个Beverage否则,有人可以实现CondimentDecorator不带的a Beverage,这没有什么意义。

组成(而不是继承)是Decorator模式的核心,因此确保每个装饰器实际上组成(装饰)其预期目标非常重要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章