标签:pre 撤销操作 ken shu com c++ 包括 命令 请求
本文主要参考:
命令模式做为一种行为模式,本质也是一种请求-响应模式。将命令的调用和命令的执行分开。
在一些软件系统中,行为的请求和实现往往是强耦合的,但是这样就无法处理命令的记录、撤销、重做等操作。例如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();
}
运行结果:
标签:pre 撤销操作 ken shu com c++ 包括 命令 请求
原文地址:https://www.cnblogs.com/corineru/p/12052052.html