C++ command model 命令模式

命令模式:将来自客户端的命令请求封装成对象。

在客户端和提供服务的服务端增加了一层中间层。 invoker

invoker 负责 1:将来自客户端的命令封装成对象(SetCmd);

 2:负责调用提供服务的服务端提供的方法,来响应客户端的命令请求

#include <iostream>
#include <vector>

using namespace std;

//铡ㄥ笀绫?鎻愪緵鍝嶅簲锻戒护镄勬柟娉?class Cooker
{
    public:
        void CookFish()
        {
            cout<<"cook fish"<<endl;
        }

        void CookMeat()
        {
            cout<<"cook meat"<<endl;
        }
};

//鿔借薄command 绫?class Command
{
    public:
       Command(Cooker *cook):m_pCook(cook){}
       virtual void ExecuteCmd()= 0; 

    protected:
        Cooker *m_pCook;
};


class CookFishCmd: public Command
{
    public:
        CookFishCmd(Cooker *cook):Command(cook){}
        void ExecuteCmd()
        {
            m_pCook->CookFish();
        }
};

class CookMeatCmd: public Command
{
    public:
        CookMeatCmd(Cooker *cook):Command(cook){}
        void ExecuteCmd()
        {   
            m_pCook->CookMeat();
        }
    
};


class Waiter
{
    public:
        void SetCmd(Command *cmd);
        void Notify();
    private:
        vector<Command*>vecCmd;
};

void Waiter::SetCmd(Command *cmd)
{
        vecCmd.push_back(cmd);
        cout<<"add_order"<<endl;
}

void Waiter::Notify()
{
    vector<Command*>::iterator iter;
    for(iter= vecCmd.begin(); iter != vecCmd.end(); iter++)
    {
        (*iter)->ExecuteCmd();
    }
}




int main()
{
    Cooker *cook = new Cooker();
    CookFishCmd *cfishCmd = new CookFishCmd(cook);
    CookMeatCmd *cmeatCmd = new CookMeatCmd(cook);


   Waiter *girl = new Waiter();
   girl->SetCmd(cfishCmd);
   girl->SetCmd(cmeatCmd);

   girl->Notify();

   return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章