zoukankan      html  css  js  c++  java
  • 设计模式——职责链模式(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天,时间太长,超过公司规定
  • 相关阅读:
    Xcode 环境下的汇编与 C/C++/ObjC (上)
    OpenGL ES的从地上爬起来,第1部分:
    Accessorizer的使用说明!
    我常用的iphone开发学习网站
    ruby+seleniumwebdriver一步一步完成自动化测试(2)—–一个测试用例
    Selenium Grid深入学习
    Seleniumwebdriver系列教程(14)————为firefox设置代理
    Seleniumwebdriver系列教程(15)————万能的截图
    Selenium Grid
    RSPEC入门学习
  • 原文地址:https://www.cnblogs.com/070412-zwc/p/6896732.html
Copyright © 2011-2022 走看看