列表

详情


阅读下列说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
  某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表6-1所示。

表6-1


为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图6-1所示。

图6-1中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。

【Java 代码】

 interface FlyBehavior {
  public void fly();
 };
 class SubSonicFly implements FlyBehavior{
  public void fly(){ System.out.println("亚音速飞行!"); }
 };
 class SuperSonicFly implements FlyBehavior{
  public void fly(){ System.out.println("超音速飞行!" ); }
 };
 interface TakeOffBehavior {
  public void takeOff();
 };
 class VerticalTakeOff implements TakeOffBehavior {
  public void takeOff (){ System.out.println("垂直起飞!" ); }
 };
 class LongDistanceTakeOff implements TakeOffBehavior {
  public void takeOff(){ System.out.println("长距离起飞!"); }
 };
  abstract class AirCraft {
      protected  (1)  ;
      protected  (2)  ;
  public void fly(){  (3)  ; }
  public void takeOff() {   (4)   ; };
 };
 class Helicopter(5)AirCraft{
      public Helicopter (){
      flyBehavior = new  (6)  ;
      takeOffBehavior = new  (7)  ;
   }
  };
 //其它代码省略

参考答案:

    (1)FlyBehavior flyBehavior   (2分)
    (2)TakeOffBehavior takeOffBehavior    (2分)
    (3)flyBehavior.fly() (2分)
    (4)takeOffBehavior.takeOff()   (2分)
    (5)extends  (3分)
    (6)SubSonicFly()    (2分)
    (7)VerticalTakeOff()       (2分)
    注:空(1)与空(2)答案可互换

详细解析:

    本题目考查了设计模式中的策略设计模式,实际上与2007年上半年Java题目的考核内容相同。   
    从本题的叙述中可以看出,存在四种不同的飞机类型,但每种飞机类型的起飞特征和飞行特征并不完全相同,这就使得我们很难采用比较直接的方法来实现重用。例如,定义一个抽象的飞机类,实现飞机的起飞特征,然后四种飞机直接重用该特征。但是,我们可以观察到,尽管飞机的起飞特征和飞行特征有所不同,有一点可以肯定的是,一种飞机都具备了飞行特征和起飞特征。因此,可以抽象出一个飞机类,其中含有飞行特征与起飞特征,但关于两个特征的实现要单独抽取出来,所以又形成了FIyBehavior类和TakeOffBehavior类,分别表示抽象的飞行特征和起飞特征,而这两个类的子类则分别现不同的起飞和飞行特征,最终转化为,在创建一个具体的飞机时,给其配上不同的起飞特征和飞行特征即可。
    本题中的空(1)和空(2)应该填写成员变量,根据类图可以得知,此处应该表示的是飞行和起飞特征变量。空(3)和空(4)处需要实现飞行与起飞特征,但AirCraft是抽象的类,所以把实现代理给指针变量。Helicopter类需要指定由父类继承而来的成员变量的初始值,因为Helicopter的特征是垂直起飞和亚音速飞行,因此生成这两个特征的对象,分别赋值给flyBehavior和takeOffBchavior变量。

上一题