姜堰网站制作,太原 网站建设公司,郑州微科网站建设,建筑方案设计流程步骤作用: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作. UML结构图: 解析: Comnand模式的思想是把命令封装在一个类中,就是这里的Command基类,同时把接收对象也封装在一个类中就是这里的Receiver 类中,由调用…作用: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作. UML结构图: 解析: Comnand模式的思想是把命令封装在一个类中,就是这里的Command基类,同时把接收对象也封装在一个类中就是这里的Receiver 类中,由调用这个命令的类也就是这里的Invoker类来调用.其实,如果弄清楚了Command模式的原理,就会发现其实它和注册回调函数的原理是很相 似的,而在面向过程的设计中的回调函数其实和这里的Command类的作用是一致的.采用Command模式解耦了命令的发出者和命令的执行者. 实现: 1)Command.h #ifndef COMMAND_H #define COMMAND_H class Command { public: virtual ~Command() {} virtual void Execute() 0; }; class Receiver { public: void Action(); }; class Invoker { public: Invoker(Command *pCommand); ~Invoker(); void Invoke(); private: Command *m_pCommand; }; class ConcreateComand : public Command { public: ConcreateComand(Receiver* pReceiver); virtual ~ConcreateComand(); virtual void Execute(); private: Receiver* m_pReceiver; }; #endif 2)Command.cpp #include Command.h #include iostream void Receiver::Action() { std::cout Receiver Actionn; } Invoker::Invoker(Command *pCommand) : m_pCommand(pCommand) { } Invoker::~Invoker() { delete m_pCommand; m_pCommand NULL; } void Invoker::Invoke() { if (NULL ! m_pCommand) { m_pCommand-Execute(); } } ConcreateComand::ConcreateComand(Receiver* pReceiver) : m_pReceiver(pReceiver) { } ConcreateComand::~ConcreateComand() { delete m_pReceiver; m_pReceiver NULL; } void ConcreateComand::Execute() { if (NULL ! m_pReceiver) { m_pReceiver-Action(); } std::cout Execute by ConcreateComandn; } 3)Main.cpp #include Command.h #include stdlib.h int main() { Receiver* pReceiver new Receiver(); Command* pCommand new ConcreateComand(pReceiver); Invoker* pInvoker new Invoker(pCommand); pInvoker-Invoke(); delete pInvoker; system(pause); return 0; }fromhttp://edu.codepub.com/2009/0930/15979.php转载于:https://www.cnblogs.com/alexusli/archive/2009/10/02/1577319.html