当前位置 : 主页 > 手机开发 > 无线 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-10
在关于装饰器模式的章节中的“头部设计模式(2014年,第2版)”一书中,作者从4种调味品类(牛奶,摩卡,大豆,鞭子)中采用实例变量饮料饮料并将其放入摘要中class CondimentDecorator. (参见第110页
在关于装饰器模式的章节中的“头部设计模式(2014年,第2版)”一书中,作者从4种调味品类(牛奶,摩卡,大豆,鞭子)中采用实例变量饮料饮料并将其放入摘要中class CondimentDecorator. (参见第110页,getSize()的解决方案 – 问题)

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

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

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

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

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

UML for coffee shop

更重要的是,与减少代码大小相比,将Beverage实例移动到CondimentDecorator中可确保每个CondimentDecorator实际上都有Beverage.否则,有人可以在没有饮料的情况下实施CondimentDecorator,这没有多大意义.

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

网友评论