命令模式
来源:互联网 发布:淘宝女士春装 编辑:程序博客网 时间:2024/06/03 19:36
命令模式
将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队而或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。
命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。
客户端和服务器端进行通信,基于某种协议。所以服务器端要包含很多种协议,和不同客户端进行通信。
#include<iostream>#include<queue>#include<Windows.h>using namespace std;//协议处理类,将各种协议封装在这个类中class HandleClientProtocol{public://处理增加金币void AddMoney(){cout<<"给玩家增加金币!"<<endl;}//处理增加钻石void AddDiamod(){cout<<"给玩家增加钻石!"<<endl;}//处理玩家装备void AddEquipment(){cout<<"给玩家穿装备!"<<endl;}//处理玩家升级void AddLevel(){cout<<"给玩家升级!"<<endl;}};//命令接口class AbstractCommand{public:virtual void handle() = 0;//处理客户端请求的接口};//下面将上述协议封装为对象//处理增加金币请求class AddMoneyCommand : public AbstractCommand{public:AddMoneyCommand(HandleClientProtocol* protocol){this->pProtocol = protocol;}virtual void handle(){this->pProtocol->AddMoney();}public:HandleClientProtocol* pProtocol;};//处理增加钻石请求class AddDiamodCommand : public AbstractCommand{public:AddDiamodCommand(HandleClientProtocol* protocol){this->pProtocol = protocol;}virtual void handle(){this->pProtocol->AddDiamod();}public:HandleClientProtocol* pProtocol;};//处理玩家装备请求class AddEquipmentCommand : public AbstractCommand{public:AddEquipmentCommand(HandleClientProtocol* protocol){this->pProtocol = protocol;}virtual void handle(){this->pProtocol->AddEquipment();}public:HandleClientProtocol* pProtocol;};//处理玩家升级请求class AddLevelCommand : public AbstractCommand{public:AddLevelCommand(HandleClientProtocol* protocol){this->pProtocol = protocol;}virtual void handle(){this->pProtocol->AddLevel();}public:HandleClientProtocol* pProtocol;};//服务器程序,考虑到上千玩家同时发送请求,所以进行排队,将请求处理函数丢到队列中class Server{public:void addRequest(AbstractCommand* command){mCommands.push(command);}void startHandle(){while(!mCommands.empty()){Sleep(2000);AbstractCommand* command = mCommands.front();command->handle();mCommands.pop();}}public:queue<AbstractCommand*> mCommands;//把客户端发送过来的协议都放到这个队列中,让服务器一个个处理};void test01(){HandleClientProtocol* protocol = new HandleClientProtocol;//客户端增加金币的请求AbstractCommand* addmoney = new AddMoneyCommand(protocol);//客户端增加钻石的请求AbstractCommand* adddiamod = new AddDiamodCommand(protocol);//客户端穿装备的请求AbstractCommand* addequipment = new AddEquipmentCommand(protocol);//客户端升级的请求AbstractCommand* addlevel = new AddLevelCommand(protocol);Server* server = new Server;//将客户端的请求加入到请求队列中server->addRequest(addmoney);server->addRequest(adddiamod);server->addRequest(addequipment);server->addRequest(addlevel);//服务器开始处理请求server->startHandle();delete addlevel;delete addequipment;delete adddiamod;delete addmoney;delete protocol;}int main(void){test01();system("pause");return 0;}
阅读全文
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 读完这篇文章,你就不会再问“APP海外推广怎么开始”
- 打造一款好手机 360°全面解析OPPO A53
- hive 正则表达式详解
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) D
- 记录Studio 初始上传项目的步骤
- 命令模式
- 软件工程(C编码实践篇) 第七次作业实验报告
- 数据库常用语法详解
- Github常用命令
- 更新--学习笔记 凸包 && K短路
- 掌网科技李炜:着力发烧级VR迎接市场爆发!
- 中交兴路车联网谈物流O2O三大关键词:产业链、大数据、生态化
- 一元众筹X6Plus 够快才畅快vivo X6送豪礼电商首销
- 散列的实现(1)