命令模式给我的感觉有点像观察者模式
网上找的原理图
Barbecuer.h
#ifndef BARBECUER_H_ #define BARBECUER_H_ #includeusing namespace std; class Barbecuer{ public: // 烤羊肉 void bakeMutton(){ cout << "烤羊肉串咯!!!" << endl; } // 烤鸡翅 void bakeChickenWing(){ cout << "烤鸡翅咯!!!" << endl; } }; #endif
Command.h
#ifndef COMMAND_H_ #define COMMAND_H_ #includeusing namespace std; #include "Barbecuer.h" class Command{ protected: Barbecuer* receiver; public: Command(Barbecuer* receiver){ this->receiver = receiver; } // 执行命令 virtual void excuteCommand() = 0; }; class BakeMuttonCommand:public Command{ public: BakeMuttonCommand(Barbecuer* receiver):Command(receiver){} virtual void excuteCommand(){ receiver->bakeMutton(); } }; class BakeChickCommand : public Command{ public: BakeChickCommand(Barbecuer* receiver):Command(receiver){} virtual void excuteCommand(){ receiver->bakeChickenWing(); } }; #endif
Waiter.h
#ifndef WAITER_H_ #define WAITER_H_ #includeusing namespace std; #include #include "Command.h" class Waiter{ private: vector orders; public: // 设置订单 void addOrder(Command* cmd){ orders.push_back(cmd); //其余操作..... } // 取消订单 void cancelOrder(Command* cmd){ // 取消操作 } // 通知全部执行 void notify(){ for(Command* order : orders){ order->excuteCommand(); } } }; #endif
main.cpp
#includeusing namespace std; #include "Waiter.h" int main(){ // 开店前准备 Barbecuer *barbecuer = new Barbecuer; // 烧烤师傅 Command* bakeChickCommand = new BakeChickCommand(barbecuer); // 烤鸡翅 Command* bakeMuttonCommand = new BakeMuttonCommand(barbecuer); // 烤羊肉 Waiter *waiter = new Waiter; // 服务员 // 顾客点餐 waiter->addOrder(bakeChickCommand); waiter->addOrder(bakeMuttonCommand); // 点餐完毕,通知后厨 waiter->notify(); return 0; }
网站推荐:命令模式 | 菜鸟教程命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处..https://www.runoob.com/design-pattern/command-pattern.html
书籍推荐:《大话设计模式》



