命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志;以及支持可撤销的操作。
github源码路径:https://github.com/dangwei-90/Design-Mode
// 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
// 参考大话设计模式 - 命令模式
#include <iostream>
#ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} }
#endif
using namespace std;
// 接收者 类
class Receiver {
public:
void Action() {
cout << "receive do action." << endl;
}
};
// 命令者 抽象类
class Command {
public:
virtual void SetReceiver(Receiver* receiver) = 0;
virtual void Execute() = 0;
protected:
Receiver* receiver_ = nullptr;
};
// 实现命令者 类
class ConcreteCommand : public Command {
public:
void SetReceiver(Receiver* receiver) {
receiver_ = receiver;
}
void Execute() {
if (receiver_) {
receiver_->Action();
}
}
};
// 调用者 类
class Invoker {
public:
void SetCommand(Command* command) {
command_ = command;
}
void ExecuteCommand() {
command_->Execute();
}
private:
Command* command_ = nullptr;
};
int main()
{
Receiver* receiver = new Receiver();
Command* command = new ConcreteCommand();
command->SetReceiver(receiver);
Invoker* invoker = new Invoker();
invoker->SetCommand(command);
invoker->ExecuteCommand();
SAFE_DELETE(invoker);
SAFE_DELETE(command);
SAFE_DELETE(receiver);
return 0;
}