zoukankan      html  css  js  c++  java
  • 设计模式11——职责链模式

    职责链模式中,对于某项事件,设置一个直接的处理者即可。如果直接处理者不能处理,则交给其上一级处理者,一直到该事件处理完毕为止。

    职责链模式好处在于,只需要设置事件的相关级别、属性,并只需要交给一个相关的处理者即可。

    Reschain.h内容

     1 #ifndef Reschain_H_H
     2 #define Reschain_H_H
     3 
     4 #include <iostream>
     5 #include <string>
     6 using namespace std;
     7 
     8 
     9 class Event
    10 {
    11 public:
    12     Event() : strInfo(""), level(0) {}
    13     void setLevel(int level0) { level = level0; }
    14     int getLevel() { return level; }
    15     void setInfo(string str) { strInfo = str; }
    16     void display() { cout << strInfo << endl; }
    17 
    18 private:
    19     string strInfo;
    20     int level;
    21 };
    22 
    23 
    24 class Manager
    25 {
    26 public:
    27     Manager() : upper(NULL) {}
    28     virtual ~Manager() {}
    29     void setUpper(Manager *upper0) { upper = upper0; }
    30     virtual void process(Event *event) = 0;
    31 
    32 protected:
    33     Manager *upper;
    34 };
    35 
    36 
    37 class Major : public Manager
    38 {
    39 public:
    40     virtual void process(Event *event){
    41         if( event->getLevel()>0 && event->getLevel()<10 ){
    42             cout << "Major processes the event!" << endl;
    43         }
    44         else{
    45             upper->process(event);
    46         }
    47     }
    48 };
    49 
    50 class Boss : public Manager
    51 {
    52 public:
    53     virtual void process(Event *event){
    54         if( event->getLevel() > 10 ){
    55             cout << "Boss processes the event!" << endl;
    56         }
    57     }
    58 };
    59 
    60 void ReschainTest()
    61 {
    62     Manager *manager1 = new Major();
    63     Manager *manager2 = new Boss();
    64     manager1->setUpper(manager2);
    65     Event *event = new Event();
    66 
    67     event->setLevel(8);
    68     manager1->process(event);
    69 
    70     event->setLevel(15);
    71     manager1->process(event);
    72 
    73 }
    74 
    75 
    76 #endif

    运行结果:

    实例中,创建了总监和老板两个处理者,创建事件后,设置其级别,并交给总监处理。若总监不能处理,则交给老板处理。

  • 相关阅读:
    【GDOI 2016 Day1】第二题 最长公共子串
    2016.5.21【初中部 NOIP提高组】模拟赛A​ 总结
    【GDOI2014模拟】雨天的尾巴
    树链剖分
    GDOI2016总结
    【GDOI 2016 Day2】第一题 SigemaGO
    【ZJOI2008】树的统计
    【GDOI2016模拟4.22】总结
    【NOIP2016提高A组模拟7.17】寻找
    【NOIP2016提高A组模拟7.17】锦标赛
  • 原文地址:https://www.cnblogs.com/MiniHouse/p/3983277.html
Copyright © 2011-2022 走看看