命令模式(C++)
来源:互联网 发布:godaddy PHP创建 编辑:程序博客网 时间:2024/05/18 03:23
简述
命令模式能比较容易的设计一个命令队列,在需要的情况下可以将命令计入日志,接收请求的一方可以否决请求。而且加进新的具体命令类不影响其他的类,因此可以比较容易的增加新的具体的命令类。
场景说明
相信大家都去过饭店吧。去了之后,首先叫服务员过来点菜,有炒饭,烧茄子,烤鱼等等(我最喜欢吃的),服务员会记录下菜名,然后交到厨房,厨师做饭。应该没有人会直接跑到后厨让厨师做饭吧,也没有人会一个一个的点,都会全部点完后再让服务员送过去的。这个场景与命令模式非常相似,点的菜名就是一个个的命令,菜单就是存放命令的容器,服务员就是控制命令集的人,厨师就是具体执行命令的。
UML类图
对象职责
Waiter: 命令管理者,负责命令的增加,删除和执行管理。
Order: 抽象命令类
RoastedEggplant: 烧茄子命令,封装好的具体命令
EggFriedRice: 炒饭命令,封装好的具体命令
RosatFish:烤鱼命令,封装好的具体命令
Chef: 厨师,命令具体的执行者,组合于具体的命令
代码实现
#include <stdio.h>#include <vector>#include <iostream>#include <list>//厨师class Chef{public:void getEggFriedRice(){std::cout << "炒饭好了" << std::endl;}void getRoastedEggplant(){std::cout << "烧茄子好了" << std::endl;}void getRoastFish(){std::cout << "烤鱼好了" << std::endl;}private:};//抽象命令class Order{public:Order(Chef *chef){mChef = chef;}virtual void ExecuteOrder(){}protected:Chef *mChef;};//炒饭class EggFriedRice : public Order{public:EggFriedRice(Chef *chef) : Order(chef){}virtual void ExecuteOrder(){mChef->getEggFriedRice();}};//烧茄子class RoastedEggplant : public Order{public:RoastedEggplant(Chef *chef) : Order(chef){}virtual void ExecuteOrder(){mChef->getRoastedEggplant();}};//烤鱼class RoastFish : public Order{public:RoastFish(Chef *chef) : Order(chef){}virtual void ExecuteOrder(){mChef->getRoastFish();}}; class Waiter{public:Waiter(){};~Waiter(){};void addOrder(Order* order){mOrderVector.push_back(order);}void emptyOrder(){mOrderVector.clear();}void ExecuteOrderList(){for (std::list<Order*>::iterator it = mOrderVector.begin(); it != mOrderVector.end(); it++){(*it)->ExecuteOrder();}}private:std::list<Order*> mOrderVector;};int main(){Chef *chef = new Chef;Order* eggFriedRice = new EggFriedRice(chef);Order* roastedEggplant = new RoastedEggplant(chef);Order* roastFish = new RoastFish(chef);Waiter *waiter = new Waiter;waiter->addOrder(eggFriedRice);waiter->addOrder(roastedEggplant);waiter->addOrder(roastFish);waiter->ExecuteOrderList();while (1);return 0;}
阅读全文
0 0
- 【C++】Chapter19:命令模式
- Objective C--命令模式
- Objective C 命令模式
- Objective C--命令模式
- 命令模式(C++)
- C语言设计模式:命令模式 //tbd
- 设计模式之命令模式(c++)
- 设计模式 行为模式 命令模式 c语言 版本实现
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- C语言和设计模式(命令模式)
- C语言和设计模式(命令模式)
- C语言和设计模式(命令模式)
- 04.C语言和设计模式(命令模式)
- 13、C语言和设计模式(命令模式)
- 设计模式——命令模式(C++)
- 8.2.2.1 在 C# 中使用命令模式捕获状态
- 学习 命令模式 -C语言,嵌入式单片机上
- 命令模式
- 搭建SpringMVC + Spring + Mybatis 框架
- C++中文件(file)、字符串(string)和向量(vector)相互间的赋值和读取数据操作
- Linux服务器Tomcat中Catalina.log中定位错误信息方法
- ThreadPoolTaskExecutor使用详解
- 写个简单到不行的WEB计算器
- 命令模式(C++)
- VMware虚拟机Linux访问外网配置
- 江城子篇-NOIP2013-货车运输
- Python学习之数据库操作
- Leetcode: Course Schedule
- CentOS 7 yum配置和vsftpd的安装配置
- Gym
- Java SE朝花夕拾之异常处理
- Google源码 -- 打Log新技巧