设计模式之命令模式
【定义】命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
【场景】这里以向窗口发送消息和窗口处理消息为例(有些牵强,UI窗口的消息管理其实可以用这个设计模式模拟实现,将Invoker改成MessageManager,set_message()改成为增加消息映射,将Window抽象成接口)。
【UML】
【代码】
#include <iostream> using namespace std; class Window { public: void action() { cout<<"window handle message!"<<endl; } }; class Message { protected: Window* window; public: void set_window(Window* wnd) { window = wnd; } virtual void excute() = 0; }; class MsgInvoker { private: Message* message; public: void set_message(Message* msg) { message = msg; } virtual void handle_message() { message->excute(); } }; class ConcreteMessage : public Message { public: void excute() { window->action(); } }; int main() { Window* window = new Window; MsgInvoker* invoker = new MsgInvoker; Message* message = new ConcreteMessage; message->set_window(window); invoker->set_message(message); invoker->handle_message(); delete window; delete invoker; delete message; return 0; }
不积跬步无以至千里,不积小流无以成江河。