问答题 阅读下列说明和Java代码,将应填入空白处的字句写在答题纸的对应栏内。
[说明]
某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表所示。
咖啡及配料表
咖 啡 价格/杯 配 料 价格/份
蒸馏咖啡(Espresso) 25 摩卡(Mocha) 10
深度烘焙咖啡(DarkRoast) 20 奶泡(Whip) 8
现采用装饰器(Decorator)模式来实现计算费用的功能,得到如图所示的类图。
【正确答案】
【答案解析】abstract
String getDescription
abstract int cost()
Beverage beverage
beverage
beverage 本题考查了Java语言的应用能力和装饰器模式的应用。
第1空很明显,是要给类Beverage前添加定义的关键字,从整个程序来看,我们应该要将类Beverage定义为抽象类,需要在前面添加关键字abstract,因此第1空的答案为abstract。
第2空处也很明显,是要给出一个函数的定义,并且该函数的函数体是“returndescription;”,从子类奶泡和摩卡中我们不难发现这个函数应该是getDescription,而该函数的返回类型是String,因此本空的答案为String getDescription。
第3空需要结合后面各子类才能发现,在Beverage中还应该定义一个函数cost(),而这个函数在Beverage中并没有实现,因此要定义为抽象函数,所以第3空的答案为abstract int cost()=0。
第4空在类CondimentDecorator中,且是该类唯一的一条语句,而它的子类分别是奶泡和摩卡,在奶泡和摩卡这两个类中,都用到了Beverage beverage,而在使用之前并没有说明,因此这就可以判定,Beverage beverage是在父类CondimentDecorator中定义的,子类直接继承使用,因此第4空的答案为Beverage beverage。
第5空和第6空在主函数当中,其中第5空是要创建一个Mocha对象,应该调用的是类Mocha的构造函数,从类Mocha中,我们可以看出,其构造函数Mocha的参数是一个Beverage类型的对象引用,而在主函数中,开始就定义了一个Beverage类型的对象引用beverage,因此这里只需填写beverage即可。同理第6空的答案也是beverage。