74 lines
1.4 KiB
C++
74 lines
1.4 KiB
C++
#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);
|
|
}; |