四个角色:
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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
设计模式之命令模式
原文:http://blog.csdn.net/hugewaves/article/details/46956961