#include<iostream>
#include<queue>
using namespace std;
class HandleClientProtocol {
public:
//处理金币
void AddMoney() {
cout << "增加金币" << endl;
}
//增加砖石
void AddDiamond() {
cout << "增加砖石" << endl;
}
//处理玩家装备
void AddEquipment() {
cout << "给玩家穿装备" << endl;
}
//处理玩家升级
void AddLevel() {
cout << "给玩家升级" << endl;
}
};
//命令接口
class AbstractCommand {
public:
virtual void handle() = 0;//处理客户端请求的接口
};
//增加金币
class AddMoneyCommand :public AbstractCommand {
public:
AddMoneyCommand(HandleClientProtocol* wp) {
p = wp;
}
virtual void handle() {
p->AddMoney();
}
private:
HandleClientProtocol* p;
};
//增加砖石
class AddDiamondCommand :public AbstractCommand {
public:
AddDiamondCommand(HandleClientProtocol* wp) {
p = wp;
}
virtual void handle() {
p->AddDiamond();
}
private:
HandleClientProtocol* p;
};
//给玩家穿装备
class AddEquipmentCommand :public AbstractCommand {
public:
AddEquipmentCommand(HandleClientProtocol* wp) {
p = wp;
}
virtual void handle() {
p->AddEquipment();
}
private:
HandleClientProtocol* p;
};
//给玩家升级
class AddLevelCommand :public AbstractCommand {
public:
AddLevelCommand(HandleClientProtocol* wp) {
p = wp;
}
virtual void handle() {
p->AddLevel();
}
private:
HandleClientProtocol* p;
};
//服务器
class Server {
public:
void addRequest(AbstractCommand* command) {
m_Commands.push(command);
}
void startHandle() {
while (!m_Commands.empty()) {
AbstractCommand* command = m_Commands.front();
command->handle();
m_Commands.pop();
}
}
private:
queue<AbstractCommand*> m_Commands;
};
int main() {
HandleClientProtocol* hcp = new HandleClientProtocol;
AbstractCommand* ac = new AddMoneyCommand(hcp);
Server* s = new Server;
s->addRequest(ac);
s->startHandle();
delete ac;
ac = new AddDiamondCommand(hcp);
s->addRequest(ac);
s->startHandle();
delete ac;
ac = new AddEquipmentCommand(hcp);
s->addRequest(ac);
s->startHandle();
delete ac;
ac = new AddLevelCommand(hcp);
s->addRequest(ac);
s->startHandle();
delete ac;
delete hcp;
delete s;
cin.get();
return 0;
}