1.为什么要使用责任链模式

责任链模式就是通过一个处理链,找到合适的结点去处理请求。责任链模式非常显著的优点是将请求和处理分开。请求者可以不用知道是谁处理的,处理者可以不用知道请求的全貌(例如在J2EE项目开发中,可以剥离出无状态Bean由责任链处理),两者解耦,提高系统的灵活性。

2.类图

类图很简单,就是一个抽象Handler和它的3个实现类,Handler是一个链式的结构,并规定了一个模版方法进行处理

3.实现

抽象类

public abstract class Handler {

private Handler nextHandler;

private int level;

public void setNextHandler(Handler nextHandler) {

this.nextHandler = nextHandler;

}

public final void doHandle(int level){

if(this.level != level){

System.out.println("交给下一位处理");

if(null == this.nextHandler){

System.out.println("没有下一位了,没人处理了");

return;

}

this.nextHandler.doHandle(level);

}else {

System.out.println("交给我处理,level=" + level);

}

}

//构造方法指定Level

public Handler(int level) {

this.level = level;

}

}

实现

public class DoHandel1 extends Handler{

private static final int myLevel = 1;

public DoHandel1() {

super(myLevel);

}

}

public class DoHandel2 extends Handler{

private static final int myLevel = 2;

public DoHandel2() {

super(myLevel);

}

}

public class DoHandel3 extends Handler{

private static final int myLevel = 3;

public DoHandel3() {

super(myLevel);

}

}

main方法

public class Main {

public static void main(String[] args) {

Handler handler1 = new DoHandel1();

Handler handler2 = new DoHandel2();

Handler handler3 = new DoHandel3();

handler1.setNextHandler(handler2);

handler2.setNextHandler(handler3);

handler1.doHandle(3);

handler1.doHandle(4);

}

}

//输出结果

交给下一位处理

交给下一位处理

交给我处理,level=3

交给下一位处理

交给下一位处理

交给下一位处理

没有下一位了,没人处理了

4.代码解释

其实上面的代码非常简单易懂,就是像本篇文章的第一句话一样的: 责任链模式就是通过一个处理链,找到合适的结点去处理请求。处理链就是由Handler的实现类组成的链,请求就是level,合适的结点就是level和请求level相同的链结点可以处理改请求。不过要注意结点不可太长,栈深度会消耗大量资源。

责任链模式 php,每天一个设计模式之(9)-----责任链模式相关推荐

  1. python的编程模式-实例讲解Python设计模式编程之工厂方法模式的使用

    工厂方法模式是简单工厂模式的进一步抽象和推广,它不仅保持了简单工厂模式能够向客户隐藏类的实例化过程这一优点,而且还通过多态性克服了工厂类过于复杂且不易于扩展的缺点.在工厂方法模式中,处于核心地位的工厂 ...

  2. 设计模式学习笔记——责任链(Chain of Responsibility)模式

    设计模式学习笔记--责任链(Chain of Responsibility)模式 @(设计模式)[设计模式, 责任链模式, chain of responsibility] 设计模式学习笔记责任链Ch ...

  3. 简易理解设计模式之:责任链模式——OA中请假流程示例

    介绍: 责任链模式属于行为型设计模式.它的定义为:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止. 类图: ...

  4. 初探Java设计模式1:创建型模式(工厂,单例等)

    Java 设计模式 一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混.自认为本文还是写得不错的,花了不少心思来写这文章和做图,力求让读者真的能看着简 ...

  5. 老王讲设计模式(一)——策略模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 老王最近接到一个工作,上 ...

  6. 设计模式7大结构型模式

    2019独角兽企业重金招聘Python工程师标准>>> 结构型模式:结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例.故可以分为类 ...

  7. 【设计模式与体系结构】代理模式

    [设计模式与体系结构]代理模式 文章目录 [设计模式与体系结构]代理模式 一.实例分析 二.代码实现 三.实现结果 一.实例分析 (1) 代理模式设计一个房产中介的模拟程序. 要求:房产中介有介绍和代 ...

  8. 区块链不好落地?腾讯云用区块链做了这些事

    导语 | 十年前,随着比特币的推出,区块链就站在了科技圈的风口浪尖,成为人们一直津津乐道的技术话题.区块链技术到底是什么?有何价值?又有哪些具体的应用?本文是腾讯云区块链专家李亮&王乐庆老师在 ...

  9. 区块链入门:如何简单易懂地介绍区块链(图文)

    原标题:区块链是什么,如何简单易懂地介绍区块链? 区块链目前就处于一个人人都谈区块链,却无法感知其实际技术魅力的阶段,正是因为此,做出区块链的杀手级应用就至关重要,要做到这一点就需要进行各种场景的探索 ...

  10. 设计模式-请假流程-责任链模式

    责任链模式的定义 ​ 首先我们可以先看一下责任链模式的定义: ​ Avoid coupling the sender of a request to its receiver by giving mo ...

最新文章

  1. Python修行之字符串(一):连接、切割、大小写、排版
  2. Linux中的echo简介(自我总结)(44)
  3. MATLAB 数值数组和字符串转换
  4. 传输预编码matlab,基于MATLAB的MIMO系统预编码性能仿真教程.doc
  5. GetWindowLong和SetWindowLong函数
  6. JUnit4学习笔记(二):参数化测试与假定(Assumption)
  7. 查看jvm 默认的垃圾回收器
  8. 链接器相关的一些基本问题
  9. 使用JDBCTemplate实现与Spring结合,方法公用 ——Emp实现类(EmpDaoImpl)
  10. JVM垃圾回收机制学习
  11. 【Python3网络爬虫开发实战】4-解析库的使用-3 使用pyquery
  12. 软件测试工程师要掌握的Linux系统命令-很全,但不是最全!
  13. 获取当前3Ds MAX版本
  14. ecshop商品列表页增加/显示货号SN
  15. loadrunner—web_url
  16. php正则判断括号中的,PHP实现正则匹配所有括号中的内容
  17. 1人30天44587行代码,分享舍得网开发经验【修订版】
  18. 嵌入式系统开发必读经典书目
  19. uni-app App和H5平台上传视频截取视频第一帧生成图片
  20. create Golang project with method

热门文章

  1. Hybrid 开发:JsBridge - Web 和客户端的桥
  2. 前端CSS - 相对定位,绝对定位,固定定位
  3. apache SSL配置
  4. 【Android开发】图形图像处理技术-绘制文本
  5. QLineEdit使用正则表达式小剖析
  6. Server 2012 Log off 按键
  7. 成功走职场要找准自己的快捷键
  8. Linux下安装jdk报Permission denied以及chmod详解
  9. [2019上海网络赛J题]Stone game
  10. [2019杭电多校第五场][hdu6625]three arrays(01字典树)