命令模式:
Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
Command 模式通过将请求封装到一个对象 (Command)中,并将请求的接受者存放到具体的ConcreteCommand 类中 (Receiver)中,从而实现调用操作的对象和操作的具体实现者之间的解耦。
C++实现:
#ifndef __COMMAND_H__ #define __COMMAND_H__ #include <iostream> using namespace std; class Receiver { public: void Action() { cout<<"Receiver Action..." << endl;} }; class Command { public: virtual void Execute() = 0; }; class ConcreteCommand : public Command { public: ConcreteCommand() { _pRec = new Receiver(); } ConcreteCommand(Receiver* pRec) : _pRec(pRec) { } virtual ~ConcreteCommand() { delete _pRec; } void Execute() { cout << "ConcreteCommand Execute: "; _pRec->Action(); } private: Receiver* _pRec; }; class Invoker { public: Invoker(Command* pCom) : _pCom(pCom) { } ~Invoker() { delete _pCom; } void Invoke() { _pCom->Execute(); } private: Command* _pCom; }; #endif #include "Command.h" int main() { //Receiver* pReceiver = new Receiver(); Command* pCommand = new ConcreteCommand(/* pReceiver */); Invoker* pInvoker = new Invoker(pCommand); pInvoker->Invoke(); delete pInvoker; return 0; }