将实例变量移到装饰器模式中的抽象类中的原因是什么? [英] What is the reason for moving the instance variable into an abstract class in the decorator pattern?

查看:16
本文介绍了将实例变量移到装饰器模式中的抽象类中的原因是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在《Head First Design Patterns(2014,第2版)》一书中关于装饰器模式的章节中,作者从4个调味品类(牛奶、摩卡、大豆、鞭子)中提取实例变量Beverage beverage,并将其放入抽象类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图:

推荐答案

比减少代码大小更重要的是,将Beverage实例移到CondimentDecorator可确保每个CondimentDecorator实际上都有一个Beverage。否则,某人可以在没有Beverage的情况下实现CondimentDecorator,这没有多大意义。

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

这篇关于将实例变量移到装饰器模式中的抽象类中的原因是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆