责任链模式(ChainOfResponsibility): 有多个对象,每个对象持有下一个对象的引用,形成一条链,请求在这条链上传递,直到某一对象决定处理该请求,但是发出者并不清楚最终哪个对象会处理该请求。

一、uml建模:

二、代码实现

/**

* 责任链模式:有多个对象,每个对象持有下一个对象的引用,形成一条链,

*

* 请求在这条链上传递,直到某一对象决定处理该请求,

*

* 但是发出者并不清楚最终哪个对象会处理该请求。

*/

interface Handler {

public void operator();

}

/**

* 这里单独对Handler进行封装,方便修改引用对象

*/

abstract class AbstractHandler implements Handler {

private Handler handler;

public Handler getHandler() {

return handler;

}

public void setHandler(Handler handler) {

this.handler = handler;

}

}

class MyHandler extends AbstractHandler implements Handler {

private String name;

public MyHandler(String name) {

this.name = name;

}

@Override

public void operator() {

if (getHandler() != null) {

System.out.print(name + ",将BUG交给——>");

/**

* 这里是关键。【注意1】这里不是递归哦~

*

* 递归:A(operator)——>A(operator)——>A(operator)

*

* 责任链:A(operator)——>B(operator)——>C(operator)

*/

getHandler().operator();

} else {

System.out.println(name + "处理BUG...\n");

}

}

}

/**

* 客户端测试类

*

* @author Leo

*/

public class Test {

public static void main(String[] args) {

MyHandler handler1 = new MyHandler("技术总监");

MyHandler handler2 = new MyHandler("项目经理");

MyHandler handler3 = new MyHandler("程序员");

/**

* 如果没有下家,将会自行处理

*

* 打印结果:技术总监处理BUG...

*/

handler1.operator();

/**

* 只要有下家,就传给下家处理

*

* 下面的打印结果:技术总监,将BUG交给——>项目经理,将BUG交给——>程序员处理BUG...

*

* 就这样,原本是技术总监自行处理的BUG,现在一层一层的把责任推给了程序员去处理

*/

handler1.setHandler(handler2);

handler2.setHandler(handler3);

/**

* 透过打印结果可以知道:MyHandler实例化后将生成一系列相互持有的对象(handler),构成一条链。

*/

handler1.operator();

/**

* 【注意2】责任链不是链表:链表有个头结点,咱每次必须通过头结点才能访问后面的节点

*

* 而责任链它可以从头访问,也可以从中间开始访问,如:handler2.operator();

*/

}

}

三、总结

1、责任链模式可以实现,在隐瞒客户端(不知道具体处理的人是谁)的情况下,对系统进行动态的调整。 2、链接上的请求可以是一条链,可以是一个树,还可以是一个环,模式本身不约束这个,需要自己去实现,同时,在一个时刻,命令只允许由一个对象传给另一个对象,而不允许传给多个对象。

java责任链模式做优惠_Java设计模式菜鸟系列(十八)责任链模式建模与实现相关推荐

  1. java 建模_Java设计模式菜鸟系列(两)建模与观察者模式的实现

    观察者(Observer)模式定义:在对象之间定义了一对多的依赖关系,这样一来.当一个对象改变状态时,依赖它的对象都会收到通知并自己主动跟新.Java已经提供了对观察者Observer模式的默认实现, ...

  2. Redis(十八)——Sentinel 哨兵模式

    文章目录 Redis(十八)--Sentinel 哨兵模式 1.哨兵模式概述 2.搭建 Sentinel 集群 3.sentinel 集群测试 4.哨兵模式的所有配置详解 Redis(十八)--Sen ...

  3. Redis进阶实践之十八 使用管道模式提高Redis查询的速度

    Redis进阶实践之十八 使用管道模式提高Redis查询的速度 原文:Redis进阶实践之十八 使用管道模式提高Redis查询的速度 一.引言 学习redis 也有一段时间了,该接触的也差不多了.后来 ...

  4. Java学习系列(十八)Java面向对象之基于UDP协议的网络通信

    UDP协议:无需建立虚拟链路,协议是不可靠的. A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达:但有些情况下,数据报可能会丢失 ...

  5. java责任链模式审批请假_Java设计模式-责任链模式

    Java设计模式-责任链模式 Java版本:jdk1.8 IDE:IDEA 一 前言 本文介绍责任链模式以及Java下的实现. 二 概念 1.什么是责任链模式 责任链模式(Chain of Respo ...

  6. java中布尔值做比较_Java中的三态布尔值

    java中布尔值做比较 我不时地错过Java中SQL的三值BOOLEAN语义. 在SQL中,我们有: TRUE FALSE UNKNOWN (也称为NULL ) 时不时地,我希望自己也可以用Java表 ...

  7. 设计模式学习笔记(八:迭代器模式)

    1.1概述 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露对象的内部表示.这就是迭代器模式的定义. 合理组织数据的结构以及相关操作是程序设计的一个重要方面,比如在程序设计中经常会使用诸如 ...

  8. 设计模式(二十四)解释器模式

    #1 场景问题# ##1.1 读取配置文件## 考虑这样一个实际的应用,维护系统自定义的配置文件. 几乎每个实际的应用系统都有与应用自身相关的配置文件,这个配置文件是由开发人员根据需要自定义的,系统运 ...

  9. github private链接访问_Hands-On Design Patterns With C++(十八)访问者模式与多分派(下)...

    本文是本书最后一篇文章,完结撒花!谢谢大家观看! 目录: trick:Hands-On Design Patterns With C++(零)前言​zhuanlan.zhihu.com 访问者模式与多 ...

最新文章

  1. 3D溜溜网站用的是php吗_浩辰3D软件中全面的阵列特征你会用吗?快来看看吧
  2. imx6 板卡移植官方yocto版本(2_定制系统)
  3. 用 Java 写一个植物大战僵尸简易版!
  4. Mysql物理逻辑备份概述
  5. Java Spring源代码学习之How is class annotation evaluated by Spring framework
  6. 2011-8-31 身体欠佳
  7. 传智播客软件测试第一期_播客:冒险如何推动一位软件工程师的职业发展
  8. 中移M5311-NBIOT-低功耗OPENCPU开发-MQTT
  9. php里面优先级最高的是,数据结构-PHP 优先级队列(最大堆)的实现
  10. Python回归 岭回归(Ridge Regression)
  11. Xshell家庭版下载
  12. Spring MVC中基于自定义Editor的表单数据处理技巧
  13. 8选1的多路选择器c语言代码,八选一数据选择器的VHDL程序
  14. 微信支付——微信H5支付实战教程(微信支付v3版本java)
  15. resin服务器搭建
  16. paddlex,2.1.0识别预测代码(包含视频的)
  17. 《俞军产品方法论》阅读笔记2020-08-07
  18. 常量的分类_基本数据类型
  19. php编程语言教程,php语言教程
  20. 栅格数据灰度化并前端转换展示

热门文章

  1. 区块链BaaS云服务(16)天德链TDBC“交易数据”
  2. Hyperledger Fabric 私有数据(1)概念
  3. (chap2 TCP/IP基础知识) TCP/IP协议分层模型
  4. HTTP与HTTPS——密码学笔记(九)
  5. arm 跳转指令跳转范围
  6. 验证异常处理调用顺序
  7. linux xargs 前一条命令的输出作为下一条命令的参数
  8. (37)0环与3环通信常规方式,PspTerminateProcess 关闭进程工具
  9. win7更新powershell到5.1
  10. Windows驱动开发学习笔记(五)—— SSDT HOOK