未分类题

某灯具厂商欲生产一个灯具遥控器,该遥控器具有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-......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

未分类题
某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新。现在采用观察者(Observer)模式来开发该系统。观察者模式的类图如图6-1所示。【Java代码】import java.util.*;interface Observer{public void update(float temp,float humidity,float cleanness);}interface Subject{public void registerObserver(Observer o); 注册对主题感兴趣的观察者public void removeObserver(Observer o); 删除观察者public void notifyObservers( ); 当主题发生变化时通知观察者}class EnvironmentData implements(1){private ArrayList observers;private float temperature,humidity,cleanness;public EnvironmentData( ){observers=new ArrayList( );}public void registerObserver(Observer o){observers.add(o);}public void removeObserver(Observer o){ *代码省略* }public void notifyObservers( ){for(int i=0;i<observers.size( );i++){Observer observer=(Observer)observers.get(i);(2);}}public void measurementsChanged( ){(3);}public void setMeasurements(float temperature,float humidity,float cleanness){this.temperature=temperature;this.humidity=humidity;this.cleanness=cleanness;(4);}}class CurrentConditionsDisplay implements(5){private float temperature;private float humidity;private float cleanness;private Subject envData;public CurrentConditionsDisplay(Subject envData){this.envData=envData;(6);}public void update(float temperature,float humidity,float cleanness){this.temperature=temperature;this.humidity=humidity;this.cleanness=cleanness;display( );}public void display( ){ *代码省略* }}class EnvironmentMonitor{public static void main(String[]args){EnvironmentData envData=new EnvironmentData( );CurrentConditionsDisplay currentDisplay=new CnrrentConditionsDisplay(envData);envData.setMeasurements(80,65,30.4f);}}
未分类题
某高校图书馆欲建设一个图书馆管理系统,目前已经完成了需求分析阶段的工作。功能需求均使用用例进行描述,其中用例“借书(CheckOutBooks)”的详细描述如下。参与者:读者(Patron)。典型事件流:1.输入读者ID;2.确认该读者能够借阅图书,并记录读者ID;3.输入所要借阅的图书ID;4.根据图书目录中的图书ID确认该书可以借阅,计算归还时间,生成借阅记录;5.通知读者图书归还时间。重复步骤3~5,直到读者结束借阅图书。备选事件流:2a.若读者不能借阅图书,说明读者违反了图书馆的借书制度(例如,没有支付借书费用等)①告知读者不能借阅,并说明拒绝借阅的原因;②本用例结束。4a.读者要借阅的书无法外借①告知读者本书无法借阅;②回到步骤3。说明:图书的归还时间与读者的身份有关。如果读者是教师,图书可以借阅一年;如果是学生,则只能借阅3个月。读者ID中包含读者身份信息。现采用面向对象方法开发该系统,得到如图3-1所示的系统类模型(部分);以及如图3-2所示的系统操作“checkOut(bookID)(借书)”通信图(或协作图)。【问题1】(8分)根据说明中的描述,以及图3-1和图3-2,给出图3-1中C1-C4处所对应的类名(类名使用图3-1和图3-2中给出的英文词汇)。【问题2】(4分)根据说明中的描述,以及图3-1和图3-2,给出图3-2中M1-M4处所对应的方法名(方法名使用图3-1和图3-2中给出的英文词汇)。【问题3】(3分)用例“借书”的备选事件流4a中,根据借书制度来判定读者能否借阅图书。若图书馆的借书制度会不断地扩充,并需要根据图书馆的实际运行情况来调整具体使用哪些制度。为满足这一要求,在原有类设计的基础上,可以采用何种设计模式?简要说明原因。