设计模式之命令模式

来源:互联网 发布:怎么做自己的淘宝客app 编辑:程序博客网 时间:2024/04/29 21:08

【定义】命令模式(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;}