Files
design-pattern/inc/chain_of_responsibility.hpp
2025-06-02 13:57:29 +08:00

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);
};