定义:
命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。
场景:
我们要设计一个遥控器,可以通过按动上边的控制按钮控制卧室和厨房的灯,还能控制卧室中的音响的开关。遥控器及时我们的“动作的请求者”,而灯和音响就是我们的“动作的执行者”。当我们按动遥控器上的某个开关后,遥控器就可以把相关的指令发送到我们的指定的家电上。这之中遥控器和家电之间是解耦的,我们完全可以通过设置,添加、修改或删除其它的家电控制功能,而不需要修改遥控器的代码。
类图:
c++代码如下:
#include <iostream>
#include <vector>
using namespace std;
class Command
{
public:
virtual void execute() = 0;
};
class NoCommand : public Command
{
public:
void execute() {};
};
class Light
{
public:
Light(string location);
void on();
void off();
private:
string m_sLocation;
};
class LightOffCommand : public Command
{
public:
LightOffCommand(string location):m_Light