设计模式-命令模式
来源:互联网 发布:社交网络迅雷下载 编辑:程序博客网 时间:2024/06/14 00:18
命令模式(Command):将一个请求封装为一个对象,从而可以用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作。
例子:服务员接受各种订单命令,并可以对订单排队或者撤销,再将订单给厨师执行
UML:
//烤肉串者class Barbecuer {public: void BakeMutton() { cout <<"烤肉串" << endl; } void BakeChickenWing() { cout << "烤鸡翅" << endl; }};//抽象命令class Command {protected: Barbecuer *m_barbecuer; //命令执行者public: Command(Barbecuer *barbecuer) :m_barbecuer(barbecuer) {} virtual void ExcuteCommand() {};};//烤肉命令class BakeMuttonCommand :public Command {public: BakeMuttonCommand(Barbecuer *barbecuer) :Command(barbecuer) {} void ExcuteCommand() { m_barbecuer->BakeMutton(); }};//烤鸡翅命令class BakeChickenWingCommand :public Command {public: BakeChickenWingCommand(Barbecuer *barbecuer) :Command(barbecuer) {} void ExcuteCommand() { m_barbecuer->BakeChickenWing(); }};//服务员class Waiter {private: list<Command*> commandlist; //命令列表public: void SetOrder(Command *command) //增加订单 { if (typeid(*command) == typeid(BakeChickenWingCommand)) //判断命令能否执行 { cout << "鸡翅没有了,请点其他的" << endl; } else { commandlist.push_back(command); //加入命令列表 cout << "增加订单" << endl; } } void CancelOrder(Command *command) //取消订单 { commandlist.remove(command); //删除命令 } void Notify() //执行所有命令 { for (auto l : commandlist) { l->ExcuteCommand(); } commandlist.clear(); //清空命令列表 }};int main(){ Barbecuer *boy = new Barbecuer(); Command *bakemuttonCommand1 = new BakeMuttonCommand(boy); Command *bakemuttonCommand2 = new BakeMuttonCommand(boy); Command *bakechickenCommand = new BakeChickenWingCommand(boy); Waiter *waiter = new Waiter(); waiter->SetOrder(bakemuttonCommand1); waiter->SetOrder(bakemuttonCommand2); waiter->SetOrder(bakechickenCommand); waiter->Notify(); system("pause"); return 0;}
0 0
- 设计模式---命令模式
- 设计模式-命令模式
- 设计模式:命令模式
- 设计模式:命令模式
- 设计模式:命令模式
- 设计模式 命令模式
- 设计模式--命令模式
- 设计模式---命令模式
- 设计模式- 命令模式
- 设计模式---命令模式
- 设计模式 - 命令模式
- 【设计模式】【命令模式】
- 设计模式---命令模式
- 设计模式 - 命令模式
- 设计模式:命令模式
- 设计模式 - 命令模式
- 设计模式-命令模式
- 设计模式---命令模式
- 益智小游戏(app)
- 小白学数据分析----->关联分析学习…
- SPSSModeler中数据测量类型的含义…
- 一遍记住Java常用的八种排序算法与代码实现
- 禁止页面滚动的详细解决方法介绍
- 设计模式-命令模式
- vbe中库文件相关操作(疑难杂症)
- 第一章 C#开发进化史:1.2排序和过滤
- WORD动态目录打印预览出现:错误未…
- openshift新增本地仓库
- 废止的法律
- 全面解析非全日制用工的风险…
- 一文读懂商业智能(BI):企业数据分析的中枢
- 关于非全日制用工若干问题的…