#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
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
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=326488000&siteId=291194637
Ranking