某软件公司欲开发一款汽车竞速类游戏,需要模拟长轮胎和短轮胎急刹车时在路面上留下的不同痕迹,并考虑后续能模拟更多种轮胎急刹车时的痕迹。现采用策略(Strategy)设计模式来实现该需求,所设计的类图如图5-1所示。

图5-1类图
【Java代码】
import java.util.*;
interface BrakeBehavior{
public(1);
/*其余代码省略*/
};
class LongWheelBrake implements BrakeBehavior{
public void stop( ){System.out.println("模拟长轮胎刹车痕迹!");}
/*其余代码省略*/
};
class ShortWheelBrake implements BrakeBehavior{
public void stop( ){System.out.println("模拟短轮胎刹车痕迹!");}
/*其余代码省略*/
};
abstract class Car{
protected(2)wheel;
public void brake( ){(3);}
/*其余代码省略*/
}:
class ShortWheelCar extends Car{
public ShortWheelCar(BrakeBehavior behavior){
(4);
}
/*其余代码省略*/
};
class StrategyTest{
public static void main(String[]args){
BrakeBehavior brake=new ShortWheelBrake( );
ShortWheelCar car1=new ShortWheelCar(brake);
car1.(5);
}
}
正确答案及解析
正确答案
解析
(1)void stop()
(2)BrakeBehavior
(3)wheel.stop()
(4)wheel=behavior
(5)brake()
策略模式是定义一系列算法,把他们一个个封装起来,并且使它们之间可相互替换,从而让算法可以独立于使用它的用户而变化。
(1)第一空接口BrakeBehavior有内容缺失,结合其实现类LongWheelBrake代码如下:
class LongWheelBrake implements BrakeBehavior{
public void stop(){System.out.println("模拟长轮胎刹车痕迹!");}
/*其余代码省略*/
};
第一空需要补充stop()方法,即(1)void stop()
(2)(3)第二、三空是抽象类Car缺少属性wheel的类型和brake()方法的方法体。
abstract class Car{
protected(2)wheel;
public void brake(){(3);}
/*其余代码省略*/
}:
根据图示策略模式,Car与BrakeBehavior是整体与部分的关系,因此Car的属性有这一个部分,即(2)BrakeBehavior,这里在类Car中,命名了一个与之联系的部分BrakeBehavior类型wheel。对于BrakeBehavior类,所包含的方法是stop,因此第(3)空填写的方法应该是wheel.stop()。这样就将Car与BrakeBehavior联系起来了。
(4)第四空是实现子类ShortWheelCar缺失ShortWheelCar(BrakeBehavior behavior)此带参构造方法的方法体:
class ShortWheelCar extends Car{
public ShortWheelCar(BrakeBehavior behavior){
(4);
}
/*其余代码省略*/
};
构造方法是对类的构造,带参构造函数一般是对其属性进行参数赋值,第四空将实现子类与其父类联系起来,子类继承父类属性wheel,此处应该是对参数wheel赋值,即(4)wheel=behavior
(5)第五空是实际调用测试过程,缺失方法名:
class StrategyTest{
public static void main(String[]args){
BrakeBehavior brake=new ShortWheelBrake();
ShortWheelCar car1=new ShortWheelCar(brake);
car1.(5);
}
}
由代码可知,car1是ShortWheelCar(brake)实例化的对象,类ShortWheelCar本身没有方法,只有默认继承父类的一个方法brake(),因此此处调用的是brake(),即(5)brake()。
包含此试题的试卷
你可能感兴趣的试题
E-mail地址由分隔符“()”分为前后两部分,分别指明用户名及邮件
-
- A.//
- B.\\
- C.@
- 查看答案
某 html 文档中有如下代码,则在浏览器中打开该文档时显示为( )。
<form>
Listl:
<input type="text" name="List1" />
<br / >
List2:
<input type="text" name="List 2 " />
< /form>

-
- A.见图A
- B.见图B
- C.见图C
- D.见图D
- 查看答案
设有商品关系P(商品名,条形码,供应商号,价格,数量), “条形码”唯一标识关系P中的每一个元组,商品名不能为空,供应商号是关系P的外键。另有供应商关系S(供应商号,供应商名,地址,电话)。关系 P 中的商品名是唯一的。建立商品关系 P 的 SQL语句如下所示:
CREATE TABLE P( 商品名CHAR(30)( ),
条形码CHAR(30) ( ) ,
供应商号 CHAR(5) ,
价格 CHAR(20) ,
数量CHAR(20)
( )(供应商号) REFERENCES S(供应商号));
查询供应商及价格小于等于 2500 元且大于等于 1280 元的“电冰箱”的数量的SQL语句为:
SELECT商品名,供应商名,价格,数量
FROM P
WHERE商品名= ’电冰箱’ AND ( ) ;
将供应商号“12021”所供应的商品价格上涨3%的SQL语句为:
UPDATE P
( )
WHERE 供应商号= ’12021’;
查询供应商地址包含“西安”的供应商名及电话的SQL语句为:
SELECT供应商名,电话
FROM S
WHERE ( );
-
- A.NULL
- B.UNIQUE
- C.NOT NULL
- D.NOT NULL UNIQUE
- 查看答案
函数f()、g()的定义如下所示。已知调用f时传递给其形参x的值是1,若以传值方式调用g,则函数f的返回值为( );若以传引用方式调用g,则函数f的返回值为( )。

-
- A.3
- B.4
- C.6
- D.7
- 查看答案


-
- A.见图A
- B.见图B
- C.见图C
- D.见图D
- 查看答案