未分类题
某灯具厂商欲生产一个灯具遥控器,该遥控器具有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-......
(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)