在关于装饰器模式的章节中的“ 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图在它们移动实例变量之前:
与减少代码大小相比,更重要的是,将Beverage
实例移至CondimentDecorator
每个实例中CondimentDecorator
实际上都具有一个Beverage
。否则,有人可以实现CondimentDecorator
不带的a Beverage
,这没有什么意义。
组成(而不是继承)是Decorator模式的核心,因此确保每个装饰器实际上组成(装饰)其预期目标非常重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句