设计模式之命令模式
【定义】命令模式(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号
浙公网安备 33010602011771号