一、意图:
将请求封装成对象,从而可以用不同的请求对客户进行参数化,对请求排队、记录日志和支持可撤销的操作;
二、类图:
三、组成元素:
Command:命令接口;
ConcreteCommand:具体的命令;
Invoker:命令执行者;
Receiver:命令的接受者;
四、实现代码:
#include "iostream" using namespace std; class Receiver { public: Receiver(){}; ~Receiver(){}; public: void Action() { cout<<"Action done!"<<endl; }; }; class Command { public: Command(){}; ~Command(){}; public: virtual void Execute()=0; }; class ConcreteCommand:public Command { public: ConcreteCommand(){}; ConcreteCommand(Receiver* pReceiver) { m_Receiver=pReceiver; }; ~ConcreteCommand() { delete m_Receiver; m_Receiver=NULL; }; public: void Execute() { if (NULL!=m_Receiver) { m_Receiver->Action(); } } private: Receiver* m_Receiver; }; class Invoker { public: Invoker(Command* command) { m_pCommand=command; }; ~Invoker() { delete m_pCommand; m_pCommand=NULL; }; private: Command* m_pCommand; public: void Invoke() { if (NULL!=m_pCommand) { m_pCommand->Execute(); } }; }; void main() { Receiver* pReceiver=new Receiver(); Command* pCommand=new ConcreteCommand(pReceiver); Invoker* pInvoker=new Invoker(pCommand); pInvoker->Invoke(); }