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

admin2013-07-09  27

问题 阅读下列说明和Java代码,将应填入(1)~(6)处的字句写在答题纸的对应栏内。
    【说明】
    某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。
   
    现采用装饰器(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 DarkRoast(){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();}
}
    publ ic class Coffee{
      public static void main(String args[]){
        Beverage beverage=new DarkRoast();
        beverage=new Mocha(   (5)   );
        beverage=new Whip(   (6)   );
        System.out.println(beverage.getDescription()  +”¥”  +beverag e.cost());
      }
    }
    编译运行上述程序,其输出结果为:
    DarkRoast,Mocha,Whip¥38

选项

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

解析 装饰器模式描述了如何动态地为一个对象添加职责。该模式采用递归方式组合对象,从而允许添加任意多的对象职责。在下列情况下可以使用装饰器模式:
    (1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
    (2)处理那些可以撤销的职责。
    (3)当不能采用生成子类的方法进行扩充时。一种情况是可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
    装饰器模式的结构如下图所示。其中:
   
    .抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这些对象动态地添加职责。
    .具体组件角色(ConcreteComponent):被装饰者,定义一个将要被装饰增加功能的类。可以给这个类的对象添加一些职责。
    .抽象装饰器(Decorator):维持一个指向构件Corn-ponent对象的实例,并定义一个与抽象组件角色Compo-nent接口一致的接口。
    .具体装饰器角色(Concrete Decorator):向组件添加职责。
    图6—1中的Beverage对应的就是上图中的抽象类Component、Espresso和DarkRoast对应的是ConcreteCom-ponent,CondimentDecorator对应抽象装饰器Decorator、Mocha和Whip扮演的是类CondimentDecorator的具体装饰器角色Concrete Decorator。
    由于类Beverage为其子类提供了统一的操作接口,所以将其定义为抽象类。通过可以在类名前加abstract关键字来定义抽象类,因此(1)处应填入abstract。
    (2)和(3)处考查构造函数的的定义。从(2)处构造甬数体中返回值的类型及后续的子类继承程序可知,(2)处应填入String getDescription;从public int cost(){return ES-PRESSO PRICE;}可以看出,cost()函数的返回值为常量,因此(3)处应填入abstract int cost()。
    (4)处考查对CondimentDecorator的定义,在该类中声明一类成员变量,并在this.beverage=beverage和returnbeverage.getDescription0+”,Mocha”加以使用。因此(4)处应填入Beverage beverage。
    (5)和(6)处考查实例化类模板的方法。类模板必须在实例化后才能使用。实例化类模板时,要给出类型实参。从类图可知,(5)和(6)处均应填入beverage。
转载请注明原文地址:https://jikaoti.com/ti/6ji7FFFM
0

相关试题推荐
最新回复(0)