介绍
命令模式,通常指的是一个对象向另外一个对象发送信息指令的行为模型,比如父母命令孩子写作业,将军命令士兵进攻,点击菜单选择页面等。
请求者只需要发出命令,至于命令的接受者,如何实现命令,则由命令的接收者来关心。
命令模式由4个角色组成,请求者角色、命令者角色、接收者角色和客户端角色。
夏天到了,炎炎烈日,都要靠空调续命,这里就以给空调调节温度为例子。空调是接收者角色,由它来执行具体的升高温度或者降低温度的操作;遥控器就是请求者角色,由遥控器发出温度+或者温度-的命令请求;命令者角色是这里的温度+或者温度-;至于拿着遥控器的我们,则是客户端角色。
UML类图
命令模式的简单实现
#include <stdio.h>
//接收者角色 空调,具体是实现温度控制的逻辑代码
class AirConditioner
{
public :
void tempretureUp()
{
printf("空调温度 +1 \n");
}
void tempretureDown()
{
printf("空调温度 -1 \n");
}
};
//命令者角色的抽象接口
class Command
{
protected:
AirConditioner *receiver;
public:
Command(AirConditioner *air_conditioner)
{
receiver = air_conditioner;
}
virtual void executeCmd() = 0;
};
//温度+命令
class TempretureUpCmd: public Command
{
public:
TempretureUpCmd(AirConditioner *air_conditioner):Command(air_conditioner){}
virtual void executeCmd()
{
receiver->tempretureUp();
}
};
//温度-命令
class TempretureDownCmd: public Command
{
public:
TempretureDownCmd(AirConditioner *air_conditioner):Command(air_conditioner){}
virtual void executeCmd()
{
receiver->tempretureDown();
}
};
//请求者 遥控器
class RemoteControl
{
public:
RemoteControl(){};
void bindTempreturUpCmd(Command *cmd)
{
tempretureUp = cmd;
}
void bindTempreturDownCmd(Command *cmd)
{
tempretureDown = cmd;
}
void controlTempretureUp()
{
tempretureUp->executeCmd();
}
void controlTempreturDown()
{
tempretureDown->executeCmd();
}
protected:
Command *tempretureUp;
Command *tempretureDown;
};
//客户端
int main(int argc,char **argv)
{
//创建好遥控器、空调、命令
AirConditioner *conditioner = new AirConditioner();
RemoteControl *control = new RemoteControl();
Command *tempUp = new TempretureUpCmd(conditioner);
Command *tempDown = new TempretureDownCmd(conditioner);
//绑定空调的【命令】到【遥控器】
control->bindTempreturUpCmd(tempUp);
control->bindTempreturDownCmd(tempDown);
//执行命令
control->controlTempretureUp();
control->controlTempreturDown();
/*
输出结果:
空调温度 +1
空调温度 -1
*/
return 0;
}