设计模式例程

This commit is contained in:
2025-06-02 13:57:29 +08:00
commit 22124bb827
32 changed files with 2149 additions and 0 deletions

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