命令模式将每个行为(命令)封装成类,
#include
#include
using namespace std;
将行为封装的接口虚类
class Command{
public:
virtual void execute()=0;
virtual ~Command(){};
};
具体的两种执行命令的行为类
class ConcreteCommand1:public Command{
public:
virtual void execute(){
cout<<“command1 is run”;
}
virtual ~ConcreteCommand1(){};
};
class ConcreteCommand2:public Command{
public:
virtual void execute(){
cout<<“command2 is run”;
}
virtual ~ConcreteCommand2(){};
};
将每种行为加入一个序列,并执行
class MacroCommand{
public:
void add(Command* cmd){
Commands.push_back(cmd);
}
void run(){
for(auto &cmd:Commands){
cmd->execute();
}
}
private:
vector<Command*>Commands;
};
int main(){
ConcreteCommand1* command1=new ConcreteCommand1();
ConcreteCommand2 command2;
MacroCommand macro;
macro.add(command1);
macro.add(&command2);
macro.run();
return 0;
}
模式定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
此模式可以将一个类的函数行为封装成类,比如用Command接收一个类指针,通过每个具体行为类接收一个指针构造Command构造函数,再在具体行为类中通过指针调用想抽离的行为