Responsibility Chain Pattern (Responsibility)

Chain of Responsibility: Allows multiple objects to have the opportunity to process the request, thereby avoiding the coupling relationship between the sender and receiver of the request. Connect this object into a chain, and pass the request until there is an object to handle it




#include <iostream>
using namespace std;

class Member{
public:
    void setRequestLeaveDay(int day){
        mRequestLeaveDay = day;
    }
    int getRequestLeaveDay(){
        return mRequestLeaveDay;
    }
private:
    int mRequestLeaveDay;
};

class Handler{
public:
    virtual void handleLeave(Member* m)=0;
};

class Boss:public Handler
{
public:
    void handleLeave(Member* m){
        if(m->getRequestLeaveDay()<10){
            cout << "The boss agrees to leave" << endl;
        }
    }
};

class ProjectManager:public Handler
{
public:
    ProjectManager (Handler * nextHandler) {
        mNextHandler = nextHandler;
    }
    void handleLeave(Member *m){
        if(m->getRequestLeaveDay()<=3){
            cout << "Project manager agrees to leave" << endl;
        }else{
            mNextHandler->handleLeave(m);
        }
    }
private:
    Handler * mNextHandler;
};

class TeamLeader:public Handler
{
public:
    TeamLeader (Handler * nextHandler) {
        mNextHandler = nextHandler;
    }
    void handleLeave(Member *m){
        if(m->getRequestLeaveDay()<=1){
            cout << "The team leader agrees to leave" << endl;
        }else{
            mNextHandler->handleLeave(m);
        }
    }
private:
    Handler * mNextHandler;
};

intmain()
{
    Boss *boss = new Boss;
    ProjectManager *projectManager = new ProjectManager(boss);
    TeamLeader * teamLeader = new TeamLeader (projectManager);
    Member *m = new Member;
    m->setRequestLeaveDay(4);
    teamLeader->handleLeave(m);
}

Boss agrees to leave

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326488000&siteId=291194637