大战设计模式【18】—— 职责链模式

职责链模式(Chain of Responsibility)

设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

一、定义

避免将请求发送者与接受者耦合在一起,让多个对象都有机会接受请求,将这些对象连成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 

 

二、结构

Handler(抽象处理者):定义了一个处理请求的接口,一般设计为抽象类,由于不同的具体处理者处理请求的方式不同,因此在其中定义了抽象请求处理方法。

ConcreteHandler(具体处理者):它是抽象处理者的子类,可以处理用户请求,它实现了在抽象处理者中定义的抽象请求处理方法。

在处理请求之前需要判断是否有相应的处理权限,如果可以则处理,否则则将请求转发给后继者。

三、优点

使得一个对象无需知道是其他哪一个对象处理其请求,对象仅需知道该请求会被处理即可,且链式结构由客户端创建

在系统中增加一个新的具体处理者无须修改原有系统源代码,只需要在客户端重新建立链式结构即可

四、缺点

由于一个请求没有一个明确地接受者,无法保证它一定会被处理

对于较长的职责链,系统性能有一定影响且不利于调试

如果建立链不当,可能会造成循环调用,导致系统进入死循环

五、应用场景

有多个对象处理同一个请求且无需关心请求的处理对象时谁以及它是如何处理的

可以动态地指定一组对象处理请求,客户端可以动态创建职责链来处理请求,还可以改变链中处理者之间的先后次序

六、个人总结

1、这个设计模式的名字很直观的表现了这个设计模式的特性

当一个请求过来时,我们使用一个链条来处理这个请求

链条上的每一个处理者只是处理自己能处理的请求,而不处理多余的请求

处理不了的就会交个下一个人

2、这个模式的使用非常简单,在下面的情况下使用效果很好

当相同的请求需要不同的处理方式,或者是不同权限的请求需要不同的类来处理

处理请求的内部逻辑非常复杂,或者处理的类型分析比较复杂

处理的次序需要进行改变的,需要解耦复杂处理请求的

3、需要注意的是构建责任链的时候一定要正确

参考博客:http://www.cnblogs.com/edisonchou/p/7215547.html
时间: 2024-11-14 04:24:38

大战设计模式【18】—— 职责链模式的相关文章

java学习笔记-设计模式18(职责链模式)

意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. public interface Handler { public void operator(); } public abstract class AbstractHandler { private Handler handler; public Handler getHandler() { return handler; } public v

设计模式之职责链模式(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

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

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

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

java设计模式之职责链模式

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

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

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

设计模式之职责链模式

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