设计模式-命令模式

行为型-命令模式

//命令模式

#include <iostream>
#include <queue>
#include <Windows.h>
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* protocol){
        this->pProtacol = protocol;
    }
    virtual void handle(){
        this->pProtacol->AddMoney();
    }
public:
    HandleClientProtocol* pProtacol;
};

//处理增加钻石请求356
class AddDiamondCommand : public AbstractCommand{
public:
    AddDiamondCommand(HandleClientProtocol* protocol){
        this->pProtacol = protocol;
    }
    virtual void handle(){
        this->pProtacol->AddDiamond();
    }
public:
    HandleClientProtocol* pProtacol;
};

//处理玩家穿装备请求
class AddEquipmentCommand : public AbstractCommand{
public:
    AddEquipmentCommand(HandleClientProtocol* protocol){
        this->pProtacol = protocol;
    }
    virtual void handle(){
        this->pProtacol->AddEquipment();
    }
public:
    HandleClientProtocol* pProtacol;
};

//处理玩家升级请求
class AddLevelCommand : public AbstractCommand{
public:
    AddLevelCommand(HandleClientProtocol* protocol){
        this->pProtacol = protocol;
    }
    virtual void handle(){
        this->pProtacol->AddLevel();
    }
public:
    HandleClientProtocol* pProtacol;
};

//服务器程序
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* adddiamond = new AddDiamondCommand(protocol);
    //客户端穿装备的请求
    AbstractCommand* addequpment = new AddEquipmentCommand(protocol);
    //客户端升级请求
    AbstractCommand* addlevel = new AddLevelCommand(protocol);

    Server* server = new Server;
    //将客户端请求加入到队列中
    server->addRequest(addmoney);
    server->addRequest(adddiamond);
    server->addRequest(addequpment);
    server->addRequest(addlevel);

    //服务器开始处理请求
    server->startHandle();
}

int main()
{
    test01();


    system("pause");
    return 0;
}

posted @ 2023-10-14 19:33  洋綮  阅读(3)  评论(0)    收藏  举报