首页 > 代码库 > 设计模式——职责链模式(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++实现)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。