zoukankan      html  css  js  c++  java
  • 设计模式:command模式

    目的:将命令设计成类的形式,并可以组织成队列

    优点:

    • 在需要的情况下,可以比较容易地将命令记入日志
    • 可以容易的实现对请求的撤销和重做
    • 由于新的具体命令类不影响其他的命令类,因此增加新的具体命令类很容易

    例子:

    class Receiver
    {
    public:
    	void action()
    	{
    		cout << "do action." << endl;
    	}
    };
    
    class Icommand
    {
    public:
    	virtual void excute() = 0;
    };
    
    class CommondFirst: public Icommand
    {
    	Receiver* receive;
    public:
    	CommondFirst(Receiver* receive)
    	{
    		this->receive = receive;
    	}
    
    	void excute()
    	{
    		cout << "CommondFirst: " << endl;
    		receive->action();
    	}
    };
    
    class CommondSecond: public Icommand
    {
    	Receiver* receive;
    public:
    	CommondSecond(Receiver* receive)
    	{
    		this->receive = receive;
    	}
    
    	void excute()
    	{
    		cout << "CommondSecond: " << endl;
    		receive->action();
    	}
    };
    
    class Invoker
    {
    	vector<Icommand*> v;
    public:
    	
    	void addCommand(Icommand* c)
    	{
    		v.push_back(c);
    	}
    	
    	void clear()
    	{
    		v.clear();
    	}
    	
    	void Notify()
    	{
    		for(vector<Icommand*>::iterator it=v.begin(); it!=v.end(); ++it)
    		{
    			(*it)->excute();
    		}
    	}
    };
    
    int main() 
    {
    	Receiver* r = new Receiver();
    	CommondFirst* cf = new CommondFirst(r);
    	CommondSecond* cs = new CommondSecond(r);
    	
    	Invoker* invoker = new Invoker();
    	invoker->addCommand(cf);
    	invoker->addCommand(cs);
    	invoker->Notify();
    	
    	return 0;
    }
  • 相关阅读:
    ASP内置对象
    VBscript脚本语言
    2018校园招聘求职记
    0.3W微功率放大器
    画一画BeagleboneBlack的PCB
    硬件类实习面试经历(已跪)
    2017会是改变人生轨迹的一年
    windows下使用vs code调试简单的C程序
    Beagleboneblack的MLO文件干了些啥
    模仿u-boot的makefile结构
  • 原文地址:https://www.cnblogs.com/chusiyong/p/11434819.html
Copyright © 2011-2022 走看看