3_6 CommandMode 命令模式
生活随笔
收集整理的這篇文章主要介紹了
3_6 CommandMode 命令模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 定義:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶
// 進行參數化,對請求排隊或記錄請求日志,以及支持可撤銷
// 操作
//
// 模式舉例:下館子點菜,想吃烤全羊就給服務員下達烤全羊命令,
// 想吃烤乳豬就給服務員下達烤乳豬命令,沒上菜之前睡時
// 隨時可撤回,咱這邊只管下單,后廚來做飯
//
// 模式特點:三個角色,廚師,服務員,客人
//
//#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;class ChuShi
{
public:void KaoQuanYang(){cout <<"廚師做飯-烤全羊"<<endl;}void KaoRuZhu(){cout <<"廚師做飯-烤乳豬"<<endl;}
};class Command
{
public:virtual void zuoFan()=0;
};class QuanYangCommand : public Command
{
public:QuanYangCommand(ChuShi * chushi):m_chushi(chushi){}virtual void zuoFan(){m_chushi->KaoQuanYang();}private:ChuShi * m_chushi;
};class RuZhuCommand : public Command
{
public:RuZhuCommand(ChuShi * chushi):m_chushi(chushi){}virtual void zuoFan(){m_chushi->KaoRuZhu();}private:ChuShi * m_chushi;
};class FuWuYuan
{
public:void addCommand(Command* c){m_commandvec.push_back(c);}void delCommand(Command* c){auto iter=find(m_commandvec.begin(),m_commandvec.end(),c);if(iter!=m_commandvec.end()){m_commandvec.erase(iter);}}void kaiZuo(){for (auto iter=m_commandvec.begin();iter!=m_commandvec.end();iter++){(*iter)->zuoFan();}}private:vector<Command*> m_commandvec;
};int main()
{FuWuYuan * pFuWuYuan = new FuWuYuan();ChuShi * pChuShi = new ChuShi();pFuWuYuan->addCommand(new QuanYangCommand(pChuShi));pFuWuYuan->addCommand(new RuZhuCommand(pChuShi));pFuWuYuan->kaiZuo();return 0;
}
?
總結
以上是生活随笔為你收集整理的3_6 CommandMode 命令模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 木马捆绑器设计思路和源码
- 下一篇: 3_7 MementoMode 备忘录模