返回顶部

一缕半夏微光

温柔半两,从容一生

导航

软件设计15|职责链模式

 

 

 

效果:

 

类图:

 

 

代码:

  1 #include <iostream>
  2 #include <string>
  3 using namespace std;
  4 
  5 class Leader
  6 {
  7 protected:
  8     Leader* m_manager;
  9     string m_name;
 10 public:
 11     Leader(Leader* leader, string name) :m_manager(leader), m_name(name) {}
 12     virtual void handleRequest(string name, int num) {}
 13 };
 14 
 15 //主任
 16 class Director : public Leader
 17 {
 18 public:
 19     Director(Leader* leader, string name) :Leader(leader, name) {}
 20     void handleRequest(string name, int num)
 21     {
 22         if (num <= 10000)
 23         {
 24             cout << "主任" << m_name << "审批物资" << name << "的采购单,采购金额为" << num << "元。" << endl;
 25         }
 26         else
 27         {
 28             m_manager->handleRequest(name, num);
 29         }
 30     }
 31 };
 32 
 33 //部门经理
 34 class Manager : public Leader
 35 {
 36 public:
 37     Manager(Leader* leader, string name) :Leader(leader, name) {}
 38     void handleRequest(string name, int num)
 39     {
 40         if (num <= 50000)
 41         {
 42             cout << "部门经理" << m_name << "审批物资" << name << "的采购单,采购金额为" << num << "元。" << endl;
 43         }
 44         else
 45         {
 46             m_manager->handleRequest(name, num);
 47         }
 48     }
 49 };
 50 
 51 //副总经理
 52 class ViceGeneralManager :public Leader
 53 {
 54 public:
 55     ViceGeneralManager(Leader* leader, string name) :Leader(leader, name) {}
 56     void handleRequest(string name, int num)
 57     {
 58         if (num <= 100000)
 59         {
 60             cout << "副总经理" << m_name << "审批物资" << name << "的采购单,采购金额为" << num << "元。" << endl;
 61         }
 62         else
 63         {
 64             m_manager->handleRequest(name, num);
 65         }
 66     }
 67 };
 68 
 69 //总经理
 70 class GeneralManager : public Leader
 71 {
 72 public:
 73     GeneralManager(Leader* leader, string name) :Leader(leader, name) {}
 74     void handleRequest(string name, int num)
 75     {
 76         if (num <= 200000)
 77         {
 78             cout << "总经理" << m_name << "审批物资" << name << "的采购单,采购金额为" << num << "元。" << endl;
 79         }
 80         else
 81         {
 82             cout << "物资"  << name << "金额太大,居然为" << num << "元,需要开职工大会确认。" << endl;
 83         }
 84     }
 85 };
 86 
 87 int main()
 88 {
 89     Leader* generalManager = new GeneralManager(NULL, "张三四");
 90     Leader* viceGeneralManager = new ViceGeneralManager(generalManager, "王五");
 91     Leader* manager = new Manager(viceGeneralManager, "李四");
 92     Leader* director = new Director(manager, "张三");
 93 
 94     director->handleRequest("1", 8000);
 95     director->handleRequest("2", 48000);
 96     director->handleRequest("3", 80000);
 97     director->handleRequest("4", 190000);
 98     director->handleRequest("5", 210000);
 99 
100     return 0;
101 }

 

 

参考链接:c++ 职责链模式(Chain of Responsibility)

posted on 2021-11-18 21:34  一缕半夏微光  阅读(29)  评论(0编辑  收藏  举报