设计模式之命令模式

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


posted @ 2012-08-26 15:24  $逝水无痕$  阅读(104)  评论(0编辑  收藏  举报