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;
    }
  • 相关阅读:
    泛型总结
    Java多线程(学习篇)
    Java线程:总结
    Java线程:线程交互
    Java线程:线程安全类和Callable与Future(有返回值的线程)
    Java线程:条件变量、原子量、线程池等
    Java线程:堵塞队列与堵塞栈
    Java线程:锁
    poj 1679 The Unique MST(唯一的最小生成树)
    poj 1659 Frogs' Neighborhood (DFS)
  • 原文地址:https://www.cnblogs.com/chusiyong/p/11434819.html
Copyright © 2011-2022 走看看