命令模式将每个行为(命令)封装成类, #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构造函数,再在具体行为类中通过指针调用想抽离的行为
|