设计模式之命令模式
【定义】命令模式(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;
}
不积跬步无以至千里,不积小流无以成江河。

浙公网安备 33010602011771号