您的位置:首页 > 其它

设计模式之命令模式

2015-07-19 18:50 260 查看
四个角色:

Receiver:命令最终传到这里,执行命令的,但可以执行多种命令

Command:拥有Receiver的指针,通过需要执行某种命令

Invoker:记录和触发命令

Client:应用

/*Command pattern*/

/* Author hugewave*/

#include <stdio.h>

#include <vector>

#include <iostream>

using namespace std;

class CReceiver

{

    public:
void funcone()
{
   cout<<"Do funcOne!"<<endl;
};

void functwo()
{
   cout<<"Do funcTwo!"<<endl;
};

};

class CCommand 

{

    protected:
CReceiver* p_rec;

    public:
CCommand(CReceiver* rec):p_rec(rec)

    {

    };

    public:
virtual void Do()=0;

};

class CConcreteCommandOne:public CCommand

{

    public:
CConcreteCommandOne(CReceiver* rec):CCommand(rec)

    {

    };
public:
   void Do()
   {
p_rec->funcone();
   };

};

class CConcreteCommandTwo:public CCommand

{

    public:
CConcreteCommandTwo(CReceiver* rec):CCommand(rec)

    {

    };
public:
   void Do()
   {
p_rec->functwo();
   };

};

class CInvoker

{

    private:
vector<CCommand*> cmdlist;

    public:
void AddCmd(CCommand* cmd)
{
   cmdlist.push_back(cmd);
}

void ExcuteCmd()
{
   vector<CCommand*>::iterator it;
   for(it=cmdlist.begin();it!=cmdlist.end();++it)
   {
(*it)->Do();
   }
}

};

int main()

{

    //client

    CReceiver * p_rec=new CReceiver();

    CInvoker* p_invoker=new CInvoker();

    CCommand* cmd1=new CConcreteCommandOne(p_rec);

    CCommand* cmd2=new CConcreteCommandTwo(p_rec);

    p_invoker->AddCmd(cmd1);

    p_invoker->AddCmd(cmd2);

    p_invoker->ExcuteCmd();

    return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: