首页 > 代码库 > 设计模式——职责链模式(C++实现)

设计模式——职责链模式(C++实现)

技术分享

 

 

  1 #include <iostream>  2 #include <string>  3   4 using namespace std;  5   6   7 class Handler  8 {  9 public: 10         Handler(Handler* pstHandler): m_pstHandler(pstHandler) 11         { 12  13         } 14  15         virtual void HandleRequest(int request) = 0; 16  17 protected: 18         Handler* m_pstHandler; 19 }; 20  21 class ConcreteHandler1: public Handler 22 { 23 public: 24         ConcreteHandler1(Handler* pstHandler): Handler(pstHandler) 25         { 26  27         } 28  29         virtual void HandleRequest(int request) 30         { 31                 if (request < 7) 32                 { 33                         cout<< "组长:批假"<< request<< ""<< endl; 34                 } 35                 else 36                 { 37                         m_pstHandler->HandleRequest(request); 38                 } 39         } 40 }; 41  42 class ConcreteHandler2: public Handler 43 { 44 public: 45         ConcreteHandler2(Handler* pstHandler): Handler(pstHandler) 46         { 47  48         } 49  50         virtual void HandleRequest(int request) 51         { 52                 if (request < 15) 53                 { 54                         cout<< "总监:批假"<< request<< ""<< endl; 55                 } 56                 else 57                 { 58                         m_pstHandler->HandleRequest(request); 59                 } 60         } 61 }; 62  63 class ConcreteHandler3: public Handler 64 { 65 public: 66         ConcreteHandler3(Handler* pstHandler): Handler(pstHandler) 67         { 68  69         } 70  71         virtual void HandleRequest(int request) 72         { 73                 if (request < 30) 74                 { 75                         cout<< "经理:批假"<< request<< ""<< endl; 76                 } 77                 else 78                 { 79                         cout<< "经理:"<< request<< "天,时间太长,超过公司规定"<< endl; 80                 } 81         } 82 }; 83  84 int main(int argc, char* argv[]) 85 { 86         Handler* jingli = new ConcreteHandler3(NULL); 87         Handler* zongjian = new ConcreteHandler2(jingli); 88         Handler* zuzhang = new ConcreteHandler1(zongjian); 89  90         zuzhang->HandleRequest(12); 91         zuzhang->HandleRequest(15); 92         zuzhang->HandleRequest(5); 93         zuzhang->HandleRequest(31); 94  95         delete jingli; 96         delete zongjian; 97         delete zuzhang; 98  99         return 0;100 }101 //////////////////////////////////102 [root@ ~/learn_code/design_pattern/20_chain]$ ./chain               103 总监:批假12天104 经理:批假15天105 组长:批假5天106 经理:31天,时间太长,超过公司规定

 

设计模式——职责链模式(C++实现)