首页 > 代码库 > 设计模式10——命令模式
设计模式10——命令模式
命令模式中,命令抽象成一个借口,包含一个命令的执行者,能够派生出各种不同的命令。并有一个命令的管理者,能够添加各种命令,添加完后,在必要的时候通知执行者执行这些命令。
Command.h内容
1 #ifndef Command_H_H 2 #define Command_H_H 3 4 #include <iostream> 5 #include <vector> 6 using namespace std; 7 8 9 class Cooker10 {11 public:12 void makeIce() { cout << "Make a Ice!" << endl; }13 void makeJuice() { cout << "Make a Juice!" << endl; }14 };15 16 class Command17 {18 public:19 Command() : cooker(NULL) {}20 virtual void excute() = 0;21 virtual ~Command() {}22 void setCooker(Cooker *cooker0) { cooker = cooker0; }23 protected:24 Cooker *cooker;25 };26 27 class CommandIce : public Command28 {29 public:30 virtual void excute() { cooker->makeIce(); }31 };32 33 class CommandJuice : public Command34 {35 public:36 virtual void excute() { cooker->makeJuice(); }37 };38 39 class Waiter40 {41 public:42 Waiter() : cooker(NULL) {}43 void addCommand(Command *command){44 command->setCooker(cooker);45 vecCommand.push_back(command);46 }47 void sendCommand(){48 for(size_t i=0; i<vecCommand.size(); ++i){49 vecCommand[i]->excute();50 }51 }52 void setCooker(Cooker *cooker0) { cooker = cooker0; }53 54 private:55 vector<Command*> vecCommand;56 Cooker* cooker;57 };58 59 60 61 void CommandTest()62 {63 Cooker *cooker = new Cooker();64 Waiter *waiter = new Waiter();65 waiter->setCooker(cooker);66 67 Command *command1 = new CommandIce();68 Command *command2 = new CommandJuice();69 waiter->addCommand(command1);70 waiter->addCommand(command2);71 72 waiter->sendCommand();73 delete waiter;74 delete cooker;75 }76 77 #endif
运行结果:
实例中,Waiter是命令的管理者,Cooker是命令执行者,添加makeIce和makeJuice两种命令并执行。
设计模式10——命令模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。