列表

详情


阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。


现采用装饰器(Decorator)模式来实现计算费用的功能,得到如图6-1所示的类图

【Java代码】
import java.util.*;
   (1) class Beverage {    //饮料
    String description = "Unknown Beverage";
    public   (2)  (){return description;}
    public   (3)  ;
}

abstract class CondimentDecorator extends Beverage {  //配料
   (4)  ;
}
 
class Espresso extends Beverage {    //蒸馏咖啡
    private final int ESPRESSO_PRICE = 25;
    public Espresso() {   description="Espresso";  }
    public int cost() {   return ESPRESSO_PRICE;   }
}
 
class DarkRoast extends Beverage {  //深度烘焙咖啡
    private finalint DARKROAST_PRICE = 20;
    public DarkRoast0 { description = "DarkRoast";   }
    public int cost(){ rcturn DARKROAST PRICE;   }
}
class Mocha extends CondimentDecorator {  //摩卡
    private final int MOCHA_PRICE = 10;
    public Mocha(Beverage beverage) {
    this.beverage = beverage;
}
 
    public String getDescription() {
    return beverage.getDescription0 + ", Mocha";
}
    public int cost() {
    return MOCHA_PRICE + beverage.cost();
    }
 }
 
class Whip extends CondimentDecorator {   //奶泡
    private finalint WHIP_PRICE = 8;
    public Whip(Beverage beverage) { this.beverage = beverage; }
    public String getDescription() {
    return beverage.getDescription()+", Whip";
}
    public int cost() { return WHIP_PRICE + beverage.cost(); }
}

public class Coffee {
    public static void main(String args[]) {
    Beverage beverage = new DarkRoast();
    beverage=new Mocha(  (5)  );
    beverage=new Whip (  (6)  ) ;
    System.out.println(beverage.getDescription0 +"¥" +beverage.cost());
}
}
编译运行上述程序,其输出结果为:
DarkRoast, Mocha, Whip ¥38

参考答案:

(1) abstract
(2) String getDescription
(3) abstract int cost()
(4) Beverage beverage
(5) beverage
(6) beverage
 

详细解析:

    本题考查了Java语言的应用能力和装饰设计模式的应用。
    第(1)空很明显,是要给类Beverage前添加定义的关键字,从整个程序来看,我们应该要将类Beverage定义为抽象类,需要在前面添加关键字abstract,因此第(1)空的答案为abstract。
    第(2)空处也很明显,是要给出一个函数的定义,并且该函数的函数体是“return description;”,从子类奶泡和摩卡中我们不难发现这个函数应该是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。

上一题