设计模式--责任链模式

责任链设计模式:

// 定义抽象的处理者
class LeaderHandler{
public:
    virtual bool handleRequest(int leave_days, LeaderHandlerChain* chain) = 0;
};
// 定义责任链
class LeaderHandlerChain{
public:
    LeaderHandlerChain& addHandler(LeaderHandler* handler){
        handlerList.push_back(handler);
        return *this;
    }

    bool handleRequest(int leave_days);

    LeaderHandler* getNextHandler(){
        int tmp_index = index + 1;
        if(tmp_index >= handlerList.size())
            return nullptr;
        return handlerList[tmp_index];
    }

    void setIndexAdd(){
        index++;
    }

private:
    QList<LeaderHandler*> handlerList;
    int index;
};

bool LeaderHandlerChain::handleRequest(int leave_days)
{
    if(handlerList.size() == 0)
        return false;

    handlerList[0]->handleRequest(leave_days, this);
}
// 定义具体的处理者

// 具体处理者1:班主任类
class ClassAdviser : public LeaderHandler{
public:
    ClassAdviser(int days){
        this->days = days;
    }

    virtual bool handleRequest(int leave_days, LeaderHandlerChain* chain){
        if(leave_days <= days){
            qDebug() << "ClassAdviser handle...";
            return true;
        }
        else
        {
            LeaderHandler* next = chain->getNextHandler();
            if(next == nullptr)
            {
                qDebug() << "no body handle this msg...";
            }
            else
            {
                chain->setIndexAdd();
                next->handleRequest(leave_days, chain);
            }
        }
    }

private:
    int days;
};

//具体处理者2:系主任类
class DepartmemHead : public LeaderHandler{
public:
    DepartmemHead(int days){
        this->days = days;
    }

    virtual bool handleRequest(int leave_days, LeaderHandlerChain* chain){
        if(leave_days <= days){
            qDebug() << "DepartmemHead handle...";
            return true;
        }
        else
        {
            LeaderHandler* next = chain->getNextHandler();
            if(next == nullptr)
            {
                qDebug() << "no body handle this msg...";
            }
            else
            {
                chain->setIndexAdd();
                next->handleRequest(leave_days, chain);
            }
        }
    }

private:
    int days;
};

//具体处理者3:院长类
class Dean : public LeaderHandler{
public:
    Dean(int days){
        this->days = days;
    }

    virtual bool handleRequest(int leave_days, LeaderHandlerChain* chain){
        if(leave_days <= days){
            qDebug() << "Dean handle...";
            return true;
        }
        else
        {
            LeaderHandler* next = chain->getNextHandler();
            if(next == nullptr)
            {
                qDebug() << "no body handle this msg...";
            }
            else
            {
                chain->setIndexAdd();
                next->handleRequest(leave_days, chain);
            }
        }
    }

private:
    int days;
};

//具体处理者4:教务处长类
class DeanOfStudies : public LeaderHandler{
public:
    DeanOfStudies(int days){
        this->days = days;
    }

    virtual bool handleRequest(int leave_days, LeaderHandlerChain* chain){
        if(leave_days <= days){
            qDebug() << "DeanOfStudies handle...";
            return true;
        }
        else
        {
            LeaderHandler* next = chain->getNextHandler();
            if(next == nullptr)
            {
                qDebug() << "no body handle this msg...";
                return false;
            }
            else
            {
                chain->setIndexAdd();
                next->handleRequest(leave_days, chain);
            }
        }
    }

private:
    int days;
};
// 客户端
LeaderHandlerChain chain;
chain.addHandler(new ClassAdviser(3)).addHandler(new DepartmemHead(5)).addHandler(new Dean(7)).addHandler(new DeanOfStudies(10));
chain.handleRequest(11);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值