#pragma once #include "common.hpp" class Manager; class PersonA // Requester 请求(内容) { public: PersonA(string name, int dayoff, string reason) : m_Name(name), m_Dayoff(dayoff), m_Reason(reason) { m_pLeader = nullptr; }; int getDayoff(); string getName(); string getReason(); void setLeader(Manager* pLeader); void Request(); private: int m_Dayoff; string m_Name; string m_Reason; Manager* m_pLeader; }; class Manager // Resonsible 责任人抽象类 { public: Manager(string name, string title) :m_Name(name), m_Title(title) { m_pNextHandle = nullptr; }; string getName(); string getTitle(); void setNextHander(Manager* p_NextHandler); virtual void handleRequest(PersonA* pPerson) = 0; protected: string m_Name; string m_Title; Manager* m_pNextHandle; }; class Supervisor :public Manager // 主管 { public: Supervisor(string name, string title) :Manager(name, title) {}; void handleRequest(PersonA* pPerson); }; class DepartmentManager :public Manager { public: DepartmentManager(string name, string title) :Manager(name, title) {}; void handleRequest(PersonA* pPerson); }; class CEO :public Manager { public: CEO(string name, string title) :Manager(name, title) {}; void handleRequest(PersonA* pPerson); }; class Administrator :public Manager { public: Administrator(string name, string title) :Manager(name, title) {}; void handleRequest(PersonA* pPerson); };