设计模式-命令模式

命令模式将请求封装为独立的对象,分离了请求的发起者与执行者,便于请求的存储、传递和管理,增强了系统的灵活性。
摘要由CSDN通过智能技术生成

命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。

#include <QCoreApplication>
#include <iostream>
#include <string>
#include <queue>
#include <Windows.h>
using namespace std;

//协议处理类
class   HandleClientProtocol{
public:
    void AddMoney(){
        cout<<"add money"<<endl;
    }

     void AddCoin(){
        cout<<"add coin"<<endl;
    }

     void AddLevel(){
         cout<<"add level"<<endl;
     }
};

//命令接口
class AbstractCommand{
public:
    virtual void handle()=0;//处理客户端请求接口

public:

};

class AddMoneyCommad:public AbstractCommand{
public:
    AddMoneyCommad(HandleClientProtocol* pProtocol){
        this->pProtocol = pProtocol;
    }

    virtual void handle(){
        this->pProtocol->AddMoney();
    }
public:
     HandleClientProtocol* pProtocol;
};

class AddLevelCommad:public AbstractCommand{
public:
    AddLevelCommad(HandleClientProtocol* pProtocol){
        this->pProtocol = pProtocol;
    }

    virtual void handle(){
        this->pProtocol->AddLevel();
    }
public:
     HandleClientProtocol* pProtocol;
};


class AddCoinCommad:public AbstractCommand{
public:
    AddCoinCommad(HandleClientProtocol* pProtocol){
        this->pProtocol = pProtocol;
    }

    virtual void handle(){
        this->pProtocol->AddCoin();
    }
public:
     HandleClientProtocol* pProtocol;
};

class Server{
public:
    void addRequest(AbstractCommand* cmd){
        Sleep(2000);
        command.push(cmd);
        AbstractCommand* com = command.front();
        com->handle();
        command.pop();
    }

    void startHandle(){
        while(!command.empty()){

        }
    }
public:
    queue<AbstractCommand*>command;

};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    HandleClientProtocol* protocol = new HandleClientProtocol;
    Server* server = new Server;
    AbstractCommand* addmoney = new AddMoneyCommad(protocol);
    AbstractCommand* addcoin = new AddCoinCommad(protocol);
    AbstractCommand* addlevel = new AddLevelCommad(protocol);
    server->addRequest(addmoney);
    server->addRequest(addcoin);
    server->addRequest(addlevel);
    server->startHandle();

    return a.exec();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值