阅读下列说明与相关类图,填空并回答问题。 【说明】 装饰者模式动态地给一个对象添加一些额外的职责,就扩展功能而言,该模式比生成子类方式更加灵活。装饰模式的提出有助于解决滥用继承的问题。 例如,一个名叫星巴兹(Starbuzz)的咖啡连锁店提供多种多样的咖啡,最朴素的设计就是采用继承,即设计一个饮料抽象基类Beverage,让不同种类的咖啡HouseBlend、 Decaf、Espresso、DarkRoast继承Beverage类,如图13-23所示。Beverage类的cost()方法是抽象方法,每个子类的cost()方法实现即返回具体咖啡种类的价钱,Beverage类的 description实例变量由每个子类设置,用来描述该类饮料,Beverage类的getDescription()方法用来返回此描述。 客户在点咖啡可以要求添加各种各样的调料(Condiment),加入的调料不同所收取的费用也是不同的,让各种加了调料的不同咖啡都继承基类Beverage,当咖啡种类和调料种类很多时,组合种类的数量就会急剧增长,就会发生“类数量爆炸”现象,如图13-24所示。 显然,采用这种设计使得代码的维护变得十分困难,可以采用装饰者模式来解决这个问题。软件设计师蝴蝶飞根据装饰者模式的思想设计了如图13-25所示的类图。 在图13-25中,将各种调料Milk、Mocha、Soy、Whip作为装饰者来装饰House- Blend、Decal、Espresso、DarkRoast等各种咖啡。下面的Java程序(代码13-6)对应其具体实现。 【代码13-6】 import java.io.* ; abstract class Beverage{ String description='Unknown Beverage'; public String getDescription(){ return description; } public (1) double cost(); } abstract class CondimentDecorator (2) Beverage { public abstract Strmg getDescription(); } class Decafextends Beverage { public Decaf(){ description='Decaf Coffee'; } public double cost(){ return 1.05; } } class Espresso extends Beverage { public Espresso() { description='Espresso'; } public double cost(){ return 1.99; } } class HouseBlend extends Beverage{ public HouseBlend(){ description='House Blend Coffee'; } public double cost(){ return.89; } } class DarkRoast extends Beverage{ public DarkRoast(){ description='Dark Roast Coffee'; } public double cost(){ return.99; } } class Mocha extends CondtmentDecorator{ Beverage (3); public Mocha(Beverage beverage){ this.beverage=beverage; } public String getDescription(){ return beverage.getDescription()+', Mocha'; } public double cost(){ return.20+beverage.cost(); } } Class Soy extends CondimentDecorator{ Beverage beverage; public Soy(Beverage beverage) { this.beverage=beverage; } public Strillg getDescription(){