1. 程式人生 > >設計模式之職責鏈模式(Chain Of Responsibility)

設計模式之職責鏈模式(Chain Of Responsibility)

複製程式碼
  1 #include <iostream>
  2 #include <string>
  3 
  4 using namespace std;
  5 
  6 //管理者類
  7 class Manager
  8 {
  9 private:
 10     string name;
 11     Manager *nextManager;
 12 public:
 13     Manager(string n,Manager *m = NULL) : name(n),nextManager(m){};
 14     void set_name(string
name) 15 { 16 this->name = name; 17 } 18 string get_name() 19 { 20 return this->name; 21 } 22 //設定下一個要處理請假資訊的管理者 23 void set_next_manager(Manager *m) 24 { 25 this->nextManager = m; 26 } 27 Manager* get_next_manager()
28 { 29 return nextManager; 30 } 31 //處理請假 32 virtual void deal_holiday(int day){}; 33 }; 34 //主管類 35 class ZhuGuan : public Manager 36 { 37 public: 38 ZhuGuan(string n,Manager *m = NULL):Manager(n,m){}; 39 virtual void deal_holiday(int day) 40 { 41 if
(day <= 0.5) 42 { 43 cout<<"主管:"<<get_name()<<"同意請假!!"<<endl; 44 } 45 else if(get_next_manager() != NULL) 46 { 47 get_next_manager()->deal_holiday(day); 48 } 49 } 50 }; 51 //人事部門類 52 class RenShi : public Manager 53 { 54 public: 55 RenShi(string n,Manager *m = NULL):Manager(n,m){}; 56 virtual void deal_holiday(int day) 57 { 58 if(day < 2) 59 { 60 cout<<"人事部:"<<get_name()<<"同意請假!!"<<endl; 61 } 62 else if(get_next_manager() != NULL) 63 { 64 get_next_manager()->deal_holiday(day); 65 } 66 } 67 }; 68 class ZongJingLi : public Manager 69 { 70 public: 71 ZongJingLi(string n,Manager *m = NULL):Manager(n,m){}; 72 virtual void deal_holiday(int day) 73 { 74 if(day < 30) 75 { 76 cout<<"總經理:"<<get_name()<<"同意請假!!"<<endl; 77 } 78 //總經理室最後一個進行處理的,所以一定要給出一個答覆 79 else 80 { 81 cout<<"總經理:"<<get_name()<<"關於你說的請假的事情,由於時間太長,以後再說吧!!"<<endl; 82 } 83 } 84 }; 85 int main() 86 { 87 //主管Mike 88 ZhuGuan Z_G("Mike"); 89 //人事部Tom 90 RenShi R_S("Tom"); 91 //總經理Vincent 92 ZongJingLi Z_J_L("Vincent"); 93 94 Z_G.set_next_manager(&R_S); 95 R_S.set_next_manager(&Z_J_L); 96 97 Z_G.deal_holiday(0.5); 98 Z_G.deal_holiday(1); 99 Z_G.deal_holiday(3); 100 Z_G.deal_holiday(31); 101 return 0; 102 }
複製程式碼