将实例变量移到装饰器模式中的抽象类中的原因是什么? [英] What is the reason for moving the instance variable into an abstract class in the decorator pattern?
本文介绍了将实例变量移到装饰器模式中的抽象类中的原因是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在《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屋!
查看全文