zoukankan      html  css  js  c++  java
  • 【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();
        
    }
    
    
    

    运行结果:

  • 相关阅读:
    .net中AjaxPro的简单使用
    关于 Activity 中 startActivityForResult 和 onActivityResult
    产品经理值得读的12本书
    存储过程中使用事务与try catch
    扁平化数据解构转化成树形结构
    JavaScript编程精解
    泛型
    OATS:Orthogonal Array Testing Strategy
    等价类划分
    C# homework
  • 原文地址:https://www.cnblogs.com/corineru/p/12052052.html
Copyright © 2011-2022 走看看