将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
关键代码:定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口
使用场景:认为是命令的地方都可以使用命令模式,比如: 1、GUI 中每一个按钮都是一条命令。 2、模拟 CMD。
#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;
}