试题七(共 15 分)阅读下列说明、图和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]已知对某载客车辆(Car)进行类建模,如图 7-1所示,其中类 Engine 表示发动机引擎,类 Wh

题目

试题七(共 15 分)

阅读下列说明、图和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

[说明]

已知对某载客车辆(Car)进行类建模,如图 7-1所示,其中类 Engine 表示发动机引擎,类 Wheel 表示车轮,类 Body 表示车身,类 Driver 表示司机,类 Passenger 表示乘客。

[Java 代码]

class Body{ //此处代码省略 }; //车身类

class Passenger{ //此处代码省略 }; //乘客类

class Wheel{ //此处代码省略 }; //车轮类

class Driver{ //司机类

public String name; //表示第几路公交车司机

public Driver(String driverName){name = driverName;} //构造函数

};

class Engine{ //引擎类

public String engineNo; //引擎编号

public Engine(String engineNo){ this.engineNo = engineNo; } //构造函数

};

public class Car{ //汽车类

static final int (1) = 7; //定义最多载客数

static final int MAX_WHEELS = 5; //定义最多轮胎数

protected Engine engine;

protected Driver driver;

protected Body body = new Body();

protected Wheel[] wheels;

protected Passenger[] passengers;

public Car(Driver driver){ //构造函数

(2) .driver = driver;

engine = new Engine("TX6536 型号引擎");

wheels = new Wheel[MAX_WHEELS];

passengers = new Passenger[MAX_PASSENGERS];

for (int index = 0; index < MAX_WHEELS; index++){

wheels[index] = new Wheel();

}

for (int index = 0; index < MAX_PASSENGERS; index++){

passengers[index] = null;

}

}

int getPassengerNumber(){ //获取车上乘客数量

//此处代码省略

}

void getOnPassenger(Passenger aPassenger ){ //乘客上车

//此处代码省略

}

void run(){ //开车

if( (3) ){ System.out.println("司机尚未上车!"); return;}

//此处代码省略

}

public static void main(String args[]){

Driver driver = new Driver("第五路公交车司机");

Car car = new Car( (4) );

for (int index = 0 ; index < MAX_PASSENGERS; index ++)

car.getOnPassenger( (5) Passenger());

car.run();

}

}

参考答案和解析
正确答案:
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

请阅读以下技术说明、类图及Java代码,根据要求将(1)~(5)空缺处的内容填写完整。

[说明]

已知对某载客车辆(Car)进行类建模,如图4-20所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。


正确答案:根据已知类图进行程序代码设计的案例分析题根据图4-19(或图4-20)载客车辆类图描述分析可得:一辆汽车可以载0~7名乘客一辆汽车可以被一个或者多个司机驾驶并且一辆汽车有4~5个轮胎一个引擎和一个车框架。程序代码中(1)空缺处表示一辆汽车最多载客数目从后面的程序代码分析可得应该填写MAX_PASSENGERS。(2)空缺处主要设置车的假设司机由于参数的名称与成员变量的名称相同因此需要加上this以示区别。(3)空缺处主要用于判断司机是否上车因此代码应该对汽车所维持的司机对象的引用是否为空进行判断。(4)空缺处用于产生一个汽车对象所以需要给汽车对象传递合适的参数构造方法中需要传递一个司机对象因此应该将driver对象传递到汽车对象中。(5)空缺处表示乘客上车getOnPassenger要求传递的是乘客对象因此空缺处应为构造乘客对象的代码。
根据已知类图进行程序代码设计的案例分析题,根据图4-19(或图4-20)载客车辆类图描述,分析可得:一辆汽车可以载0~7名乘客,一辆汽车可以被一个或者多个司机驾驶,并且一辆汽车有4~5个轮胎,一个引擎和一个车框架。程序代码中(1)空缺处表示一辆汽车最多载客数目,从后面的程序代码分析可得,应该填写MAX_PASSENGERS。(2)空缺处主要设置车的假设司机,由于参数的名称与成员变量的名称相同,因此需要加上this以示区别。(3)空缺处主要用于判断司机是否上车,因此,代码应该对汽车所维持的司机对象的引用是否为空进行判断。(4)空缺处用于产生一个汽车对象,所以,需要给汽车对象传递合适的参数,构造方法中需要传递一个司机对象,因此应该将driver对象传递到汽车对象中。(5)空缺处表示乘客上车,getOnPassenger要求传递的是乘客对象,因此空缺处应为构造乘客对象的代码。

第2题:

阅读下列说明、图和Java代码,将应填入(n)处的字句写在对应栏内。

【说明】

已知对某载客车辆(Car)进行类建模,如图7-1所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。

【Java代码】

class Body{ //此处代码省略 ); //车身类

class Passenger{ //此处代码省略 )/ //乘客类

class Wheel{ //此处代码省略 ); //车轮类

class Driver{ //司机类

public String name; //表示第几路公交车司机

public Driver(String driverName){name = driverName/) //构造函数

};

class Engine{//引擎类

public String engineNo;//引擎编号

public Engine(String engineNo){this.engineNo=engineNo;)//构造函数

};

public class Car{//汽车类

static final int(1)=7; //定义最多载客数

static final int MAX WHEELS =5; //定义最多轮胎数

protected Engine engine;

protected Driver driver;

protected Body body=new Body();

protected Wheel[] wheels;

protected Passenger[]passengers;

public Car(Driver driver){ //构造函数

(2).driver=driver;

engine=new Engine("TX6536型号引擎");

wheels=new Wheel[MAX WHEELS];

passengers=new Passenger[MAX_PASSENGERS];

for(int index=0;index<MAX_WHEELS;index++){

wheels[index]=new Wheel();

}

for(int index=0;index<MAX_PASSENGERS;index++){

passengers[index]=null;

}

}

int getPassengerNumber(){//获取车上乘客数量

//此处代码省略

}

void getOnPassenger(Passenger aPassenger){//乘客上车

//此处代码省略

}

void run(){ //开车

if((3)){System.out.println("司机尚未上车!");return;}

//此处代码省略

}

public static void main(String args[]){

Driver driver=new Driver("第五路公交车司机");

Car car=new Car((4));

for (int index = 0 ; index < MAX_PASSENGERS; index ++)

car.getOnPassenger((5) Passenger());

car.run();

}

}


正确答案:(1)MAX_PASSENGERS (2)this (3)driver==null (4)driver (5)new
(1)MAX_PASSENGERS (2)this (3)driver==null (4)driver (5)new 解析:根据类图描述[分析]可得:一辆汽车可以载0~7名乘客,一辆汽车可以被一个或者多个司机驾驶,并且一辆汽车有4~5个轮胎,一个引擎和一个车框架。程序代码中空(1)处表示一辆汽车最多载客数目,从后面的程序代码[分析]可得,应该填写 MAX PASSENGERS。空(2)处主要设置车的假设司机,由于参数的名称与成员变量的名称相同,因此需要加上this以示区别。空(3)处主要用于判断司机是否上车,因此,代码应该对汽车所维持的司机对象的引用是否为空进行判断。空(4)处用于产生一个汽车对象,所以需要给汽车对象传递合适的参数,构造方法中需要传递一个司机对象,因此应该将driver对象传递到汽车对象中。空(5)处表示乘客上车,getOnPassenger要求传递的是乘客对象,因此空缺处应为构造乘客对象的代码。

第3题:

请阅读以下技术说明、类图及C++代码,根据要求将(1)~(5)空缺处的内容填写完整。

[说明]

已知对某载客车辆(Car)进行类建模,如图4-19所示。其中,类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。

[C++代码]

car.run();

}


正确答案:根据已知类图进行程序代码设计的案例分析题根据图4-19(或图4-20)载客车辆类图描述分析可得:一辆汽车可以载0~7名乘客一辆汽车可以被一个或者多个司机驾驶并且一辆汽车有4~5个轮胎一个引擎和一个车框架。程序代码中(1)空缺处表示一辆汽车最多载客数目从后面的程序代码分析可得应该填写MAX_PASSENGERS。(2)空缺处主要设置车的假设司机由于参数的名称与成员变量的名称相同因此需要加上this以示区别。(3)空缺处主要用于判断司机是否上车因此代码应该对汽车所维持的司机对象的引用是否为空进行判断。(4)空缺处用于产生一个汽车对象所以需要给汽车对象传递合适的参数构造方法中需要传递一个司机对象因此应该将driver对象传递到汽车对象中。(5)空缺处表示乘客上车getOnPassenger要求传递的是乘客对象因此空缺处应为构造乘客对象的代码。
根据已知类图进行程序代码设计的案例分析题,根据图4-19(或图4-20)载客车辆类图描述,分析可得:一辆汽车可以载0~7名乘客,一辆汽车可以被一个或者多个司机驾驶,并且一辆汽车有4~5个轮胎,一个引擎和一个车框架。程序代码中(1)空缺处表示一辆汽车最多载客数目,从后面的程序代码分析可得,应该填写MAX_PASSENGERS。(2)空缺处主要设置车的假设司机,由于参数的名称与成员变量的名称相同,因此需要加上this以示区别。(3)空缺处主要用于判断司机是否上车,因此,代码应该对汽车所维持的司机对象的引用是否为空进行判断。(4)空缺处用于产生一个汽车对象,所以,需要给汽车对象传递合适的参数,构造方法中需要传递一个司机对象,因此应该将driver对象传递到汽车对象中。(5)空缺处表示乘客上车,getOnPassenger要求传递的是乘客对象,因此空缺处应为构造乘客对象的代码。

第4题:

阅读下列说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都

有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌

灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式

的类图如图5-1所示。

【c++代码】

}


正确答案:
本题考查命令(Command)模式的基本概念和应用。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。在软件系统中,行为请求者与行为实现者之间通常呈现一种紧耦合的关系。但在某些场合,比如要对行为进行记录撤销重做事务等处理,这种无法抵御变化的紧耦合是不合适的。这种情况下,使用Command模式将行为请求者与行为实现者进行解耦。题目中给出了Command模式的类图,其中:Command类为所有命令声明了一个接口。调用命令对象的execute()方法,就可以让接收者进行相关的动作。ConcreteCommand类定义了动作和接收者之间的绑定关系。调用者只要调用execute()就可以发出请求,然后由ConcreteCommand调用接收者的一个或多个动作。Invoker持有一个命令对象,并在某个时间点调用命令对象的execute()方法,将请求付诸实行。Receiver知道如何进行必要的工作,实现这个请求。任何类都可以当接收者。了解了Command模式的内涵之后,下面来看程序。由于Command类的主要作用是为所有的ConcreteCommand定义统一的接口,在c++中通常采用抽象类来实现。C++的抽象类是至少具有一个纯虚拟函数的类。本题中的接口就是execute()方法,所以(1)处要求填写的是纯虚拟函数cxecute的定义方式,即vifrualvoidexecute()=0。类LightOnCammand、LightOfiCommand对应的就是模式中的ConcreteCommand;ConcreteCommand中execute()方法的代码在类图中已经给出,现在需要确定recelver是谁。类Light充当的是Receiver,其中定义了两种action:on和off.所以(2)、(3)对应代码分别为light->on()、light->off()。类RemoteControl对应的是模式中的Invoker,在该类中设置需要控制的命令对象。(4)处对应的代码为onCommands[slot],设置“开灯”命令对象;(5)处对应的代码为affcommands[slot].设置‘关灯”命令对象。类RemoteControl中的方法onButtanWasPushed和offlButtonWasPushed,分别完成对开灯、关灯命令对象的execute方法的调用,所以(6)、(7)处分别对应代码onCommands[slot]->execute()、offCommands[slot]->execute()。试题五参考答案(1)virtualvoidexecute()=0(2)light->on()(3)light->off()(4)onCommands[slot](5)offCommands[slot](6)onCommands[slot]->execute()(7)offCommands[slot]->execute()

第5题:

阅读下列说明、图和C++代码,填补空缺。

[说明]

已知对某载客车辆(Car)进行类建模,如图12-2所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。

const int __________ =7; //定义最多载客数

const int MAX_WHEELS=5; //定义最多轮胎数

class Body{ //此处代码省略 ); //车身类

class Passenger{ //此处代码省略}; //乘客类

Class Wheel{ //此处代码省略}; //车轮类

Class Driver{ //司机类

public:

string name; //表示第几路公交车司机

Driver(string driverName):marne( __________ ){}; //构造函数

};

class Engine{ //引擎类

public:

string engineNo; //引擎编号

Engine(string engineNo){ __________ ->engineNo=engineNo; }

//构造函数

};

Class Car{ //汽车类

protected:

Engine *engine; Driver *driver; Body body;

Wheel *wheels[MAX_WHEELS]; Passenger *passengers[MAX_PASSENGERS];

public:

Car(Driver *driver)( //构造函数

this->driver=driver;

engine=new Engine("TX653 6型号引擎");

for(int index=0; index<MAX_WHEELS; index++){

wheels[index]=new Wheel( );

}

for(int index=0; index passengers[index]=NULL;

}

}

virtual -Car( ){ //析构函数

for (int index=0; index<MAX_WHEELS; index++)

delete wheels[index];

delete __________ ;

}

int getPassengerNumber( ){ //获取车上乘客数量

//此处代码省略

}

void getonpassenger(Passenger *apassenger ){

//乘客上车

//此处代码省略

}

void run( ){ //开车

if(driver==NULL){cout<< "司机尚未上车!"; return; }

//此处代码省略

}

};

void main( ){

Driver driver("第五路公交车司机");

Car car( __________ );

Passenger passengers[MAX_PASSENGERS];

for(int index=0; index<MAX_PASSENGERS; index++)

//乘客上车处理

car. getOnPasSenger(&passengers[index]);

car. run( );

}


正确答案:MAX_PASSENGERS driverName this engine &driver
MAX_PASSENGERS driverName this engine &driver 解析:根据类图描述,分析可得:一辆汽车可以载0~7名乘客,一辆汽车可以被一个或者多个司机驾驶,并且一辆汽车有4~5个轮胎,一个引擎和一个车框架。程序代码中空(1)处表示一辆汽车最多载客数目,从后面的程序代码分析可得,应该填写MAX_PASSENGERS。空(2)处用于构造一个司机对象,需要司机名称driverName作为参数。空(3)处主要设置车的假设司机,由于参数的名称与成员变量的名称相同,因此需要加上this以示区别。空(4)处所对应代码段是汽车car的析构函数,与car的构造函数相对应,需要将构造函数中创建的引擎和车轮删除,所以空(4)处应为删除引擎。空(5)处用于产生一个汽车对象,所以,需要给汽车对象传递合适的参数,构造方法中需要传递一个司机对象,因此应该将driver对象传递到汽车对象中。

第6题:

阅读下列说明和流程图,将应填入(n)的字句写在对应栏内。

【说明】

下列流程图(如图4所示)用泰勒(Taylor)展开式

sinx=x-x3/3!+x5/5!-x7/7!+…+(-1)n×x2n+1/(2n+1)!+…

【流程图】

计算并打印sinx的近似值。其中用ε(>0)表示误差要求。


正确答案:(1)x*x (2)x->t (3)│t│:ε (4)s+2->s (5)(-1) * t* x2/(s* (s-1))
(1)x*x (2)x->t (3)│t│:ε (4)s+2->s (5)(-1) * t* x2/(s* (s-1)) 解析:该题的关键是搞清楚几个变量的含义。很显然变量t是用来保存多项式各项的值,变量s和变量x2的作用是什么呢?从流程图的功能上看,需要计算11、3!、5!,……,又从变量s的初值置为1可知,变量s主要用来计算这此数的阶乘的,但没有其他变量用于整数自增,这样就以判断s用来存储奇数的,即s值依次为1、3、5,……。但x2的功能还不明确,现在可以不用管它。
(2)空的作用是给t赋初值,即给它多项式的第一项,因此应填写“x->t”。(3)空处需填写循环条件,显然当t的绝对值小于ε(>0)就表示已经达到误差要求,因此(3)空应填入“│t│:ε”。由变量s的功能可知,(4)空应当实现变量s的增加,因此(4)空应填入“s+2->s”。 (5)空应当是求多项式下一项的值,根据多项式连续两项的关系可知,当前一项为t时,后一项的值为(-1)*t*x*x/(s*(s-1))。但这样的话,每次循环都需要计算一次x*x,计算效率受到影响,联想到变量x2还没用,这时就可以判断x2就是用来存储x*x的值,使得每次循环者少进行一次乘法运算。因此(1)空处应填入“x*x”,(5)空处应填入“(-1)*t*x2/(s*(s-1))”。

第7题:

阅读下列说明、图和Java代码,填补空缺。

[说明]

已知对某载客车辆(Car)进行类建模,如图13-2所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。

[Java代码]

class Body{ //此处代码省略 }; //车身类

class Passenger{ //此处代码省略 }; //乘客类

class Wheel{ //此处代码省略 }; //车轮类

class Driver{ //司机类

public String name; //表示第几路公交车司机

public Driver(String driverName){name=driverName; }

//构造函数

};

class Engine{ //引擎类

public String engineNo; //引擎编号

public Engine(String engineNo){this.engineNo=engineNo; }

//构造函数

};

public class Car{ //汽车类

static final int (1) =7; //定义最多载客数

static final int MAX_WHEELS=5; //定义最多轮胎数

protected Engine engine;

protected Driver driver;

protected Body body=new Body( );

protected Wheel[]wheels;

protected Passenger[]passengers;

public Car(Driver driver){ //构造函数

(2) .driver=driver;

engine=new Engine("TX6536型号引擎");

wheels = new Wheel[MAX_WHEELS];

passengers=new Passenger[MAX_PASSENGERS];

for(int index=0; index<MAX_WHEELS; index++){

wheels[index]=new Wheel( );

}

for(int index=0; index<MAX_PASSENGERS; index++){

passengers[index]=null;

}

}

int getPassengerNumber( ){ //获取车上乘客数量

//此处代码省略

}

void getOnPassenger(Passenger aPassenger ){

//乘客上车

//此处代码省略

}

void run( ){ //开车

if( (3) )(System.out.printin("司机尚未上车!"); return; }

//此处代码省略

}

public static void main(String args[]){

Driver driver=new Driver("第五路公交车司机");

Car car=new Car( (4) );

for(int index=0; index <MAX_PASSENGERS; index++)

car.getOnPassenger( (5) Passenger( ));

car.run( );

}

}


正确答案:MAX_PASSENGERS this driver==null driver new
MAX_PASSENGERS this driver==null driver new 解析:根据题意可得,程序代码中空(1)处定义最多载客数目,从后面的程序代码可得MAX_PASSENGERS用来定义最多载客数目,所以空(1)处应该为MAX_PASSENGERS。由于参数的名称driver与成员变量的名称相同,因此需要加上this,所以空(2)处为this。空(3)处主要用于判断司机是否上车,可以通过driver是否等于null进行判断。空(4)处用于新建一个汽车对象,其构造方法中需要一个司机对象driver,所以空(4)处应为driver。函数getOnPassenger的参数应该是乘客对象,因此要构造一个乘客对象,所以空(5)处为new。

第8题:

阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。

【说明】

已知头指针分别为La和lb的有序单链表,其数据元素都是按值非递减排列。现要归并La和Lb得到单链表Lc,使得Lc中的元素按值非递减排列。程序流程图如下所示:


正确答案:(1)pa->data=pb->data (2)pc->next=pa (3)pc=pb (4)pb=pb->next (5)pc->next=pa?pa:pb
(1)pa->data=pb->data (2)pc->next=pa (3)pc=pb (4)pb=pb->next (5)pc->next=pa?pa:pb 解析:本题考查程序流程图和有序链表的归并。
题目要求我们归并头指针分别为La和Lb的有序单链表,组成一个新的有序单链表 Lc,而Lc又是指向La的。首先,我们来了解一下单链表的结构。单链表中一般有两个域,一个是数据域,用来存放链表中的数据;另一个是指针域,用来存放指向下个结点的指针。其归并的过程应该是先比较链表La和Lb中第一个元素,将较小的从其链表中取出放到k中,再取下一个结点的值去比较,重复这个过程,直到一个链表被全部取完,再将另一个链表剩下的部分连接到Lc后面即可。
下面,我们来看程序流程图的内容。首先是用两个指针变量pa和pb分别指向La和Lb的当前待比较插入的结点,而pc指向Lc表中当前最后一个结点。再下面是一个条件判断语句,其作用是判断链表La和Lb是否为空,如果有一个为空,只要将另一个链表剩下的部分连接到Lc后面,程序应该就可以结束了。
第(1)空是条件判断语句的条件,根据我们上面的分析,再结合流程图下面的内容,我们可以知道,这个条件语句的作用是比较当前待插入的两个值的大小,而指针变量pa和pb分别指向La和Lb的当前待比较插入的结点,因此,此空的答案为 pa->data=pb->data。
第(2)空是在条件为真的情况下执行的语句,如果条件判断为真,应该将pa所指结点连接到pc所指结点后面,因此,pc所指结点的指针域应该存放pa所指结点的地址。所以,此空的答案为pc->next=pa。
第(3)空和第(4)空都是在条件为假的情况下执行的语句,如果条件为假,说明 pb所指结点的值小于pa所指结点的值,应该将pb所指结点连接到pc所指结点后面,图中已经实现这一功能,要我们完成的是在插入后的后继工作。由于pc指向的是Lc表中当前最后一个结点,在插入一个结点后,要修改pc的值。在将pb所指结点插入后,链表中的最后一个结点就是pb所指结点,第(3)空的答案应该为pc=pb。执行完这些功能后,指针pb应该要往后移动,即指向下一个结点,第(4)用来完成这个功能,所以答案为pb=pb->next。
在前面,我们已经讲到如果链表La和Lb有一个为空,只要将另一个链表剩下的部分连接到Lc后面即可。第(5)空就是用来完成这个功能的,但我们不知道具体是哪个链表为空,还需要判断,因此,此空答案为pc->next=pa?pa:pb。

第9题:

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

[说明]

下图是一个完整的供应链结构图,如图7-1所示。

图7-2是管进与电子商务的整全图。

请把图7-1空缺的部分补充完整。


正确答案:(1)制造商 (2)零售商 (3)供应信息流。
(1)制造商 (2)零售商 (3)供应信息流。

第10题:

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都

有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌

灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。command模式

的类图如图6-1所示。

【Java代码】

}


正确答案:
本题考查命令(Command)模式的基本概念和应用。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。在软件系统中,行为请求者与行为实现者之间通常呈现一种紧耦合的关系。但在某些场合,比如要对行为进行记录撤销重做事务等处理,这种无法抵御变化的紧耦合是不合适的。这种情况下,使用command模式将行为请求者与行为实现者进行解耦。题目中给出了Lommamt模式的类图,其中:Command类为所有命令声明了一个接口。调用命令对象的execute()方法,就可以让接收者进行相关的动作。ConcreteCommand类定义了动作和接收者之间的绑定关系。调用者只要调用execute()就可以发出请求,然后由ConcreteCommand调用接收者的一个或多个动作。Invoker持有一个命令对象,并在某个时间点调用命令对象的execute()方法,将请求付诸实行。Receiver知道如何进行必要的工作,实现这个请求。任何类都可以当接收者。了解了Command模式的内涵之后,下面来看程序。由于Command类的主要作用是为所有的ConcreteCommand定义统一的接口,在Java中通常采用接口(interface)来实现,所以(1)处对应的代码为interfaceCommand。类LightOnCommand、LightOffCommand对应的就是模式中的ConcreteCommand。ConcreteCommand中execute()方法的代码在类图中已经给出,现在需要确定receiver是谁。类Light充当的是Receiver.其中定义了两种action:on和off.所以(2)、(3)对应代码分别为light.on()和light.off()。类RemoteControl对应的是模式中的Invoker,在该类中设置需要控制的命令对象。(4)处对应的代码为onCammands[slot],设置“开灯”命令对象:(5)处对应的代码为offCommands[slot],设置‘关灯”命令对象。类RemoteControl中的方法onButtonWasPushed和ofiButtonWasPushed,分别完成对开灯、关灯命令对象的execute方法的调用。所以(6)、(7)处分别对应代码onCommands[slot].execute()、offCommands[slot].execute()。试题六参考答案(1)interfaceCommand(2)light.on()(3)light.off()(4)onCommands[slot](5)offi:ommands[slot](6)onCommands[slot].execute()(7)ofiCommands[slot].execute()

更多相关问题