设计模式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

运行结果:

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

时间: 2024-08-29 08:39:38

设计模式11——职责链模式的相关文章

设计模式之职责链模式(JAVA实现)

学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没有权限,交由总经理处理,最后,总经理处理了,不同意. 职责链的意思就是,如果没有处理该类请求的权限,交由具有更高权限的对象处理.依次类推 这里将处理对象抽象为Handler类,经理.总监等为继承Handler的具体处理类,同时模拟客户端Client向Handler对象发出请求 类图如下 下面为具体代

图解Java设计模式之职责链模式

图解Java设计模式之职责链模式 学校OA系统的采购审批项目 :需求是 传统方案解决OA系统审批,传统的设计方案 职责链模式基本介绍 职责链模式解决OA系统采购审批 职责链模式在SpringMVC框架应用的源码 职责链模式的注意事项和细节 学校OA系统的采购审批项目 :需求是 采购员采购教学器材1)如果金额 小于等于 5000,由教学主任审批 (0<=x<=5000)2)如果金额 小于等于 10000,由院长审批(5000 < x <= 10000)3)如果金额 小于等于 3000

设计模式之职责链模式(Chain of Responsibility)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些详细的类的信息封装起来.第二,它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,

行为型设计模式之职责链模式(Chain of Responsibility)

结构 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 1 using System; 2 3 abstract class Handler 4 { 5 protected Handler successorHand

《设计模式》——职责链模式

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求者的发送者和接受者之间的耦合关系,这个对象连接成一条链,并沿着这条连传递该请求,直到有一个对象处理它为止. UML图如下 具体例子分为三步 第一步:设置一个抽象类,抽象类中有两个无返回值的方法,一个是设置继承者的方法(SetSuccessor),另外一个是抽象方法,这个抽象方法被子类重写来处理具体的请求. 第二步:设置三个具体的继承者子类,自己继承抽象类,三个子类分别是ConcreteHandl

深入理解JavaScript系列(38):设计模式之职责链模式

介绍 职责链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 也就是说,请求以后,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者.提交请求的对象并不明确知道哪一个对象将会处理它——也就是该请求有一个隐式的接受者(implicit receiver).根据运行时刻,任一候选者都可以响应相应的请求,候选者的数目是任意

java设计模式之职责链模式

[学习难度:★★★☆☆,使用频率:★★☆☆☆] "一对二","过","过"--这声音熟悉吗?你会想到什么?对!纸牌.在类似"斗地主"这样的纸牌游戏中,某人出牌给他的下家,下家看看手中的牌,如果要不起上家的牌则将出牌请求再转发给他的下家,其下家再进行判断.一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新的牌.在这个过程中,牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求.在设计模式中,我们也有一种专

设计模式值职责链模式(行为型)

目录 一.行为型模式 二.职责链模式定义 三.职责链模式角色 四.简单实例 五.模式应用 一.行为型模式 介绍职责链模式之前先介绍一下行为型设计模式,因为按照GoF模式分类,职责链就是一种行为型设计模式.行为型设计模式就是主要表示类或者对象之间的关联关系,分为类行为型和对象行为型.类行为型一般都是通过类的继承或者多态等等方式实现.对象行为型就是通过对象的聚合等等关联实现. 二.职责链模式定义 职责链模式是一种对象行为型模式.根据"合成复用"原则,尽量使用关联来取代类继承,对象行为型可以

设计模式之职责链模式

职责链模式 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合.将系统连成一条线,并沿着这条线传递请求,直到有一个对象处理他为止. Handler package com.hml.responsiblity; public abstract class Handler { protected Handler successor; public Handler getSuccessor() { return successor; } public void setSuccesso