命令模式
来源:互联网 发布:戚薇淘宝店叫什么名 编辑:程序博客网 时间:2024/06/15 18:08
#include <iostream>#include <string>#include <list>using namespace std;class Barbecuer{public: void bakeMutton() { cout<<"烤羊肉串"<<endl; } void bakeChickenWing() { cout<<"烤鸡翅"<<endl; }};class Command{protected: Barbecuer *receiver;public: Command(Barbecuer *receiver) { this->receiver=receiver; } virtual void executeCommand()=0;};class BakeMuttonCommand:public Command{public: BakeMuttonCommand(Barbecuer *receiver):Command(receiver) {} void executeCommand() { receiver->bakeMutton(); }};class BakeChikenWingCommand:public Command{public: BakeChikenWingCommand(Barbecuer *receiver):Command(receiver) {} void executeCommand() { receiver->bakeChickenWing(); }};class Waiter{private: Command *command;public: void setOrder(Command *command) { this->command=command; } void notify() { command->executeCommand(); }};class Waiter2{private: list<Command*> orders;public: void setOrder(Command *command) { orders.push_back(command); } void cancelOrder(Command *command) {} void notify() { list<Command*>::iterator iter=orders.begin(); while(iter!=orders.end()) { (*iter)->executeCommand(); iter++; } }};int main(){ Barbecuer *boy=new Barbecuer(); Command *bm1=new BakeMuttonCommand(boy); Command *bm2=new BakeMuttonCommand(boy); Command *bc1=new BakeChikenWingCommand(boy); Waiter2 *girl=new Waiter2(); girl->setOrder(bm1); girl->setOrder(bm2); girl->setOrder(bc1); girl->notify(); /* Barbecuer *boy=new Barbecuer(); Command *bm1=new BakeMuttonCommand(boy); Command *bm2=new BakeMuttonCommand(boy); Command *bc1=new BakeChikenWingCommand(boy); Waiter *girl=new Waiter(); girl->setOrder(bm1); girl->notify(); girl->setOrder(bm2); girl->notify(); girl->setOrder(bc1); girl->notify(); */ return 0;}
GOOD:一、建立命令队列;二、可以将命令记入日志;三、接收请求的一方可以拒绝;四、添加一个新命令类不影响其它类;命令模式把请求一个操作的对象与知道怎么操行一个操作的对象分开。
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 武汉博大男性成为“一秒先生”有原因
- 3.2_Scala templates common use cases
- 初学“Jave”心得
- 搜狗输入法的愚人节狂想
- -Dmaven.multiModuleProjectDirectory system propery is not set.
- 命令模式
- Pseudocode MD5 CODE
- 链接器相关问题
- LeetCode-4-Median of Two Sorted Arrays
- c++ primer 学习笔记之右值引用
- adnroid actionbar属性
- MFC对话框使用标签页控件
- Python标准库:内置函数set([iterable])
- Ubuntu14.04下安装eclipse