【c++设计模式】命令模式

行为型模式

15)命令模式

本文主要参考:

https://www.jianshu.com/p/0ae8582ff831

命令模式做为一种行为模式,本质也是一种请求-响应模式。将命令的调用和命令的执行分开。
在一些软件系统中,行为的请求和实现往往是强耦合的,但是这样就无法处理命令的记录、撤销、重做等操作。例如word中的撤销操作,几乎所有的命令都能够被撤销。
通过将命令的调用和请求分别抽象成为一组操作,就可以实现两者的弱耦合。

命令模式主要包括三个角色:

  • 命令,一般是抽象类,定义各种不同的命令操作
  • 命令的执行者
  • 命令的调用者

例如在餐厅点餐,有什么需要只要跟服务员说就好了,不需要直接跟做菜的人说。


//烤肉师傅,命令执行者
class BarbecueMaster{
public:
    void makemutton(){
        cout<<"making mutton"<<endl;
    }
    
    void makechicken(){
        cout<<"making chicken"<<endl;
    }
};


//命令类
class Command{
protected:
    BarbecueMaster* p_master;
public:
    Command(BarbecueMaster* p):p_master(p){}
    //命令的执行
    virtual void ExecuteCommand()=0;
};

class CommandMutton : public Command{
public:
    CommandMutton(BarbecueMaster* p):Command(p){}
    void ExecuteCommand(){
        p_master->makemutton();
    }
};

class CommandChicken:public Command{
public:
    CommandChicken(BarbecueMaster* p):Command(p){}
    void ExecuteCommand(){
        p_master->makechicken();
    }
};

//服务员,命令调用者
class Waiter{
private:
    vector<Command*> m_vec;
public:
    void add(Command* p){
        m_vec.push_back(p);
    }
    void submitCmd(){
        for(auto it=m_vec.begin();it!=m_vec.end();it++){
            (*it)->ExecuteCommand();
        }
    }
};


int main()
{
    Waiter* pwaiter = new Waiter();
    BarbecueMaster* pMaster = new BarbecueMaster();
    pwaiter->add(new CommandMutton(pMaster));
    pwaiter->add(new CommandChicken(pMaster));
    pwaiter->submitCmd();
    
}


运行结果:

原文地址:https://www.cnblogs.com/corineru/p/12052052.html