设计模式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 Cooker 10 { 11 public: 12 void makeIce() { cout << "Make a Ice!" << endl; } 13 void makeJuice() { cout << "Make a Juice!" << endl; } 14 }; 15 16 class Command 17 { 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 Command 28 { 29 public: 30 virtual void excute() { cooker->makeIce(); } 31 }; 32 33 class CommandJuice : public Command 34 { 35 public: 36 virtual void excute() { cooker->makeJuice(); } 37 }; 38 39 class Waiter 40 { 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两种命令并执行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!