题目详情

某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如图5-1所示。

中级软件设计师,历年真题,2014年下半年(下午)《软件设计师》真题

【C++代码】

class Light{

public:

Light(string name){/*代码省略*/}

void on(  ){/*代码省略*/}//开灯

void off(  ){/*代码省略*/}//关灯

};

class Command{

public:

(1);

};

class LightOnCommand:public Command{//开灯命令

private:

Light*light;

public:

LightOnCommand(Light*light){this->light=light;}

void execute(  ){(2);}

};

class LightOffCommand:public Command{//关灯命令

private:

Light*light;

public:

LightOffCommand(Light*light){this->light=light;}

void execute(  ){(3);}

};

class RemoteControl{//遥控器

private:

Command*onCommands[7];

Command*offCommands[7];

public:

RemoteControl(  ){/*代码省略*/}

void setCommand(int slot,Command*onCommand,Command*offCommand){

(4)=onCommand;

(5)=offCommand;

}

void onButtonWasPushed(int slot){(6);}

void offButtonWasPushed(int slot){(7);}

};

int main(  ){

RemoteControl*remoteControl=new RemoteControl(  );

Light*livingRoomLight=new Light("Living Room");

Light*kitchenLight=new Light("kitchen");

LightOnCommand*livingRoomLightOn=new LightOnCommand(livingRoomLight);

LightOffCommand*livingRoomLightOff=newLightOffCommand(livingRoomLight);

LightOnCommand*kitchenLightOn=new LightOnCommand(kitchenLight);

LightOffCommand*kitchenLightOff=new LightOffCommand(kitchenLight);

remoteControl->setCommand(0,livingRoomLightOn,livingRoomLightOff);

remoteControl->setCommand(1,kitchenLightOn,kitchenLightOff);

remoteControl->onButtonWasPushed(0);

remoteControl->offButtonWasPushed(0);

remoteControl->onButtonWasPushed(1);

remoteControl->offButtonWasPushed(1);

/*其余代码省略*/

return 0;

}

正确答案及解析

正确答案
解析

(1)virtual void execute()=0

(2)light->on()

(3)light->off()

(4)onCommands[slot]

(5)offCommands[slot]

(6)onCommands[slot]->execute()

(7)offCommands[slot]->execute()

本题考查设计模式的实现,难度较小。根据类图和已有代码可写出空缺的代码,书写方式注意java和C++的区别即可。

Command类为所有的命令声明了一个接口,因此需要一个纯虚函数,这个函数根据下面的子类可以看到,应该为execute(),因此第一空填写virtual void execute()=0;

(2)和(3)定义了开灯、关灯action,因此,分别填写(2)light->on()(3)light->off();

(4)(5)分别设置“开灯”命令对象、“关灯”命令对象,因此分别填写(4)onCommands[slot](5)offCommands[slot];

(6)(7)分别完成对开灯、关灯命令对象的execute方法的调用,因此分别填写(6)onCommands[slot]->execute()

(7)offCommands[slot]->execute()。

包含此试题的试卷

你可能感兴趣的试题

单选题

设16位浮点数,其中阶符1位、阶码值6位、数符1位、尾数8位。若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是( )。

中级嵌入式系统设计师,章节练习,软件水平考试《中级嵌入式系统设计师》

  • A.见图A
  • B.见图B
  • C.见图C
  • D.见图D
查看答案
单选题

平均故障间隔时间MTBF用以表示系统平均无故障可正常运行的时间,下列与MTBF有关的叙述不正确的是______。

中级嵌入式系统设计师,章节练习,软件水平考试《中级嵌入式系统设计师》

  • A.见图A
  • B.见图B
  • C.见图C
  • D.见图D
查看答案
问答题

初级网络管理员,专项练习,软件水平考试《网络管理员》模拟题

初级网络管理员,专项练习,软件水平考试《网络管理员》模拟题

查看答案
单选题

中级软件设计师,模拟试题,2022年软件水平考试《中级软件设计师》模拟题

  • A.A
  • B.B
  • C.C
  • D.D
查看答案
单选题

中级软件设计师,模拟试题,2022年软件水平考试《中级软件设计师》模拟题

  • A.R
  • B.S
  • C.RS
  • D.R,S
查看答案

相关题库更多 +