我只需要把请求交给我的直接上级,他能不能处理,或者他转交给他的上级处理,我不关心
我是一个职员,我的直接上级是GroupManager,再往上还有ProjectManager, CEO,我只需要把我的请求交给直接上级,他们会层层审批,直到遇到能够最终做决定的人
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include <iostream> #include <cstdint>
enum class req: uint8_t { emRest, emLongHoliday, emResign };
class abstructManager { public: void setNext(abstructManager* next) { m_next = next; } virtual std::string postReq(req r) = 0; virtual ~abstructManager() {} protected: abstructManager* m_next; };
class GroupManager : public abstructManager { public: std::string postReq(req r) override { switch(r) { case req::emRest: return "GM:好好休息"; case req::emLongHoliday: case req::emResign: return m_next->postReq(r); } } }; class ProjectManager : public abstructManager { public: std::string postReq(req r) override { switch(r) { case req::emRest: return "PM:批准"; case req::emLongHoliday: return "PM:项目比较忙,下次给你调休"; case req::emResign: return m_next->postReq(r); } } };
class CEO : public abstructManager { public: std::string postReq(req r) override { switch(r) { case req::emRest: return "CEO:行,但是要扣工资"; case req::emLongHoliday: return "CEO:大家都没休息,努力奋斗啊"; case req::emResign: return "CEO:别走了,明年给你涨工资"; } } };
int main() {
GroupManager gm; ProjectManager pm; CEO cm;
gm.setNext(&pm); pm.setNext(&cm);
std::cout << gm.postReq(req::emRest) << std::endl; std::cout << gm.postReq(req::emLongHoliday) << std::endl; std::cout << gm.postReq(req::emResign) << std::endl; return 0; }
|