问答题

【说明】
 已知某企业欲开发一家用电器遥控系统,即用户使用一个遥控器即可控制某些家用电器的开与关。遥控器如左下所示。该遥控器共有4个按钮,编号分别是0至3,按钮0和2能够遥控打开电器1和电器2,按钮1和3则能遥控关闭电器1和电器2。由于遥控系统需要支持形式多样的电器,因此,该系统的设计要求具有较高的扩展性。现假设需要控制客厅电视和卧室电灯,对该遥控系统进行设计所得类图如右下所示。

 右上图中,类RomoteController的方法onPressButton(int button)表示当遥控器按键按下时调用的方法,参数为按键的编号;Command接口中on和off方法分别用于控制电器的开与关;Light中turnLight(int degree)方法用于调整电灯灯光的强弱,参数 degree值为0时表示关灯,值为100时表示开灯并且将灯光亮度调整到最大;TV中 setChannel(int channel)方法表示设置电视播放的频道,参数channel值为0时表示关闭电视,为1时表示开机并将频道切换为第1频道。
【C++代码】
class Light{ //电灯类
public:
 void trunLight(int degree){//调整灯光亮度,0表示关灯,100表示亮度最大);
};
class TV{//电视机类
public:
vold setChannel(int channel]{//调整电视频道,0表示关机,1表示开机并切换到1频道};
};
class Command{//抽象命令类
public:
 virtual void on()=0;
 virtual void off()=0;
};
class RemoteController{ //遥控器类
protected:
 Command* commands [4];//遥控器有4个按钮,按照编号分别对应4个Command对象
public:
 void onPressButton(int button){ //按钮被按下时执行命令对象中的命令
   if(button % 2==0)commands[button]->on();
   else commands[button]->off();
 }
 void setCommand(int button,Command* command){
   <u> (1) </u>=command;//设置每个按钮对应的命令对象
}
};
class LightCommand:public Command{ //电灯命令类
protected:  Light* light; //指向要控制的电灯对象
public:
 void On(){light->trunLight(100););
 void off()[light-><u> (2) </u>;);
 LightCommand(Light * light){this->light=light;);
};
class TVCommand:public Command{//电视机命令类
protected:  TV*tv; //指向要控制的电视机对象
public:
 void on(){tv-><u> (3) </u>;};
 void off(){tv->setChannel(0););
 TVCommand(TV *tv){this->tv=tv;);
};
void main(){
 Light light;  TV tv;//创建电灯和电视对象
 LightCommand lightCommand (&light);
 TVCommand tVCommand(&tv);
 RemoteController remoteController;
 remoteController. setCommand(0,<u> (4) </u>); //设置按钮0的命令对象
 …//此处省略设置按钮1、按钮2和按钮3的命令对象代码
}
 本题中,应用命令模式能够有效让类<u> (5) </u>和类<u> (6) </u>、类<u> (7) </u>之间的耦合性降至最小。

【参考答案】

(1)commands[button] (2)trunLight(0) (3)setChaunel(1) (4)&lig......

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

问答题
【说明】 栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(Stock Top),而另一端称为栈底(Stock Bottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈 入栈(Push)、弹栈 出栈(Pop)。 当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储(如下图所示)。 以下C代码采用链式存储结构实现一个整数栈操作。 【C代码】 typedef struct List { int data; 栈数据 struct List* next; 上次入栈的数据地址 }List; typedef struct Stack{ List* pTop; 当前栈顶指针 }Stack; Stack* NewStack() {return (Stack*) calloc(1 sizeof(Stack));} int IsEmpty(Stack* S){ 判断栈S是否为空栈 if(<u> (1) < u>)return 1; return 0; } int Top(Stack* s){ 获取栈顶数据。若栈为空,则返回机器可表示的最小整数 if(IsEmpty(S))return INT_ MIN; return<u> (2) < u>; } void Push(Stack* S,int theData) { 将数据theData压栈 List* newNode; newNode=(List*)calloc(1 sizeof (List)); newNode->data=theData; newNode->next=S->pTop; S->pTop=<u> (3) < u>; } void Pop(Stack* S) { 弹栈 List* lastTop; if(IsEmpty(S) ) return; lastTop=S->pTop; S->pTop=<u> (4) < u>; free(lastTop); } #define MD(a) a<<2 int main(){ int i; Stack* myStack; myStack= NewStack(); Push(myStack,MD(1)); Push(myStack,MD(2)); Pop(myStack); Push(myStack,MD(3)+1); while( !IsEmpty(myStack) ){ printf( %d ,Top(myStack)); Pop(myStack); } return 0; } 以上程序运行时的输出结果为:<u> (5) < u>