某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如图5-1所示。
【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()。
包含此试题的试卷
你可能感兴趣的试题
Advancements in ( )have contributed to the growth of the automotive industry through the creation and evolution of self-driving vehicles.
-
- A.Artificial Intelligence
- B.Cloud Computing
- C.Internet of Things
- D.Big Data
- 查看答案
In project human resource management , ( )is not a source of power for the project manager.
-
- A.referent power
- B.expert power
- C.reward power
- D.audit power
- 查看答案
At the project establishment stage , the feasibility study mainly includes techinical feasibility analysis , ( ), operation environment feasibility analysis and other aspects of feasibility analysis.
-
- A.detail feasibility analysis
- B.opportunity analysis
- C.economic feasibility analysis
- D.risk analysis
- 查看答案
( )is a grid that shows the project resources assigned to each work package.
-
- A.Stakeholder engagement assessment matrix
- B.Requirements traceability matrix
- C.Probability and impact matrix
- D.Responsibility assignment matrix
- 查看答案
Xinhua News Agency reported in January 2022,Chian will further promote the developmet of a digital economy during the 14th Five-Year Plan eriod(2021-2025). The plan also emphasized industrial ( )transformation.
-
- A.digital
- B.networking
- C.intelligentize
- D.informatization
- 查看答案