设计模式例程
This commit is contained in:
74
inc/chain_of_responsibility.hpp
Normal file
74
inc/chain_of_responsibility.hpp
Normal file
@ -0,0 +1,74 @@
|
||||
#pragma once
|
||||
#include "common.hpp"
|
||||
|
||||
class Manager;
|
||||
|
||||
class PersonA // Requester <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
||||
{
|
||||
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 <20><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
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 // <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
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);
|
||||
};
|
Reference in New Issue
Block a user