简介
将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令模式通过这种封装的方式实现将客户端和接收端解耦。
优点:
实现客户端和接受者之间的解耦。
可以动态的添加新的命令。
只需要调用同一个方法(doCommand方法)便可以实现不同的功能。
缺点:
实现一个具体的命令系统,可能要创建很多的具体命令对象。
应用场景
命令模式一个常见的例子就是在应用程序中“撤销操作”功能的实现,没在在用户进行某项操作的时候,相应的“撤销操作”命令对象就被置入一个队列中,而每个命令对象被执行之后,程序的状态就倒退一步。
代码如下:
#include <iostream>
#include <string>
#include <memory>
//接受者对象Receiver:
class light
{
public:
void light_on(void)
{
std::cout << "灯打开了!!" << std::endl;
};
void light_off(void)
{
std::cout << "灯关上了!!" << std::endl;
};
};
class