将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
关键代码:定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口
使用场景:认为是命令的地方都可以使用命令模式,比如: 1、GUI 中每一个按钮都是一条命令。 2、模拟 CMD。
cpp
#include <iostream>
using namespace std;
class Reciever {
public:
void Action() {
cout << "Reciever::Action..." << endl;
}
};
class Command {
public:
virtual ~Command() { }
virtual void Excute() = 0;
};
class ConcreteCommand :public Command {
public:
ConcreteCommand(Reciever *rev) {
_rev = rev;
}
void Excute() {
_rev->Action();
}
private:
Reciever *_rev;
};
class Invoker {
public:
Invoker(Command* cmd) {
_cmd = cmd;
}
void Invoke() {
_cmd->Excute();
}
private:
Command *_cmd;
};
int main() {
Reciever *rev = new Reciever();
Command* cmd = new ConcreteCommand(rev);
Invoker *inv = new Invoker(cmd);
inv->Invoke();
delete rev;
delete cmd;
delete inv;
return 0;
}