责任链

责任链模式通俗来说就是关联一串能够处理事务的对象,使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。【view事件处理】【okhttp interceptors】

【抽象处理者】Handler : 定义出一个处理请求的接口,抽象方法handleRequest()规范子类处理请求的操作。

【具体处理者】ConcreteHandler : 具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。

【客户端】Client : 设置不同的具体处理者的层级。

结构类图

举例【周杰伦事务的责任链】

周杰伦每天都要接收到成千上万个邮件,其中还包括一些垃圾邮件,比如什么房地产啊,英语啊,健身的。除了完了垃圾邮件,剩下的邮件再由经纪人进行筛选,经纪人不能处理的邮件转由方文山去处理,同理,如果是作词相关的信息就由方文山来处理,最后剩下的再发给周杰伦(周杰伦也可以不处理)

【智能机器管家】 : 处理无用的垃圾邮件

【大妮】 : 处理负面新闻

【方文山】 : 御用文人,执笔写歌词

【周杰伦】 : 如果前面几个人都没有解决,就由自己处理该邮件。【自己也可以不处理】

抽象Handler定义规范

public abstract class Handler {

private Handler successor;

public Handler getSuccessor() {

return successor;

}

public void setSuccessor(Handler successor) {

this.successor = successor;

}

abstract Response handlerRequest(String msgChain);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

大佬们处理的“邮件”Response

public class Response {

public Response(String msg, String dealMan) {

this.msg = msg;

this.dealMan = dealMan;

}

private String msg;

private String dealMan;

public String getMsg() {

return msg;

}

public String getDealMan() {

return dealMan;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

【处理垃圾信息的管家】

public class RubbishHandler extends Handler {

@Override

Response handlerRequest(String msgChain) {

if (msgChain.contains("安利") || msgChain.contains("健身吗靓仔") || msgChain.contains("信用卡办理")) {

return new Response("清空垃圾信息", "智能机器管家");

} else {

return getSuccessor().handlerRequest(msgChain);

}

}

}

1

2

3

4

5

6

7

8

9

10

11

【处理负面新闻的大妮】

public class NegativeHanlder extends Handler {

@Override

Response handlerRequest(String msgChain) {

if (msgChain.contains("卓伟") || msgChain.contains("赵五儿") || msgChain.contains("宋祖德")) {

return new Response("马上拿1000万封口费", "大妮");

} else {

return getSuccessor().handlerRequest(msgChain);

}

}

}

1

2

3

4

5

6

7

8

9

10

11

【御用创作文人方文山】

public class TalentedHanlder extends Handler {

@Override

Response handlerRequest(String msgChain) {

if (msgChain.contains("张惠妹") || msgChain.contains("林夕") || msgChain.contains("张学友")) {

return new Response("执笔写歌词", "方文山");

} else {

return getSuccessor().handlerRequest(msgChain);

}

}

}

1

2

3

4

5

6

7

8

9

10

11

【周杰伦亲自出马】

public class JayHanlder extends Handler {

@Override

Response handlerRequest(String msgChain) {

return new Response("媳妇,别闹", "周杰伦");

}

}

1

2

3

4

5

6

7

看一下客户端的处理

Handler rubbishHandler = new RubbishHandler();//创建Handler实例

Handler negativeHanlder = new NegativeHanlder();

Handler talentedHanlder = new TalentedHanlder();

Handler jayHanlder = new JayHanlder();

rubbishHandler.setSuccessor(negativeHanlder);//然后关联层级

negativeHanlder.setSuccessor(talentedHanlder);

talentedHanlder.setSuccessor(jayHanlder);

Response response_new = rubbishHandler.handlerRequest("周杰伦先生你好,我是卓伟,我这边有一张侯佩琴的...");

System.out.println(response_new.getDealMan() + "【处理了该事件】" + response_new.getMsg());

Response response_new2 = rubbishHandler.handlerRequest("昆凌说老周啊,该生三胎了啊");

System.out.println(response_new2.getDealMan() + "【处理了该事件】" + response_new2.getMsg());

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

总结

责任链模式其实就是一个灵活版的if…else…语句,它就是将这些判定条件的语句放到了各个处理类中

责任链优点

解耦请求者和发送者。

简化具体责任对象,因为它不知道链的结构,只要处理自己对应的工作即可。

可以动态的增加或者删除责任对象。

责任链缺点

并不能保证请求一定会被执行,可能落到链尾之外【可以是优点也可以是缺点】

如果出错,不太容易除错。可能需要到每个具体的责任对象一 一排查。

一个责任链需要整个具体责任链对象遍历,然后设置不同的层级。

java 事件链_Java设计模式——责任链模式(Chain of Responsibility)相关推荐

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

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

  2. java 工厂方法_java设计模式-工厂方法模式

    1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的"创建与使用相分离" ...

  3. java外观设计修改_Java设计模式之外观模式和装饰器模式的设计(精选)

    前言 本篇来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接 ...

  4. 格力电器Java面试题_JAVA设计模式学习--工厂模式

    今天谈一下对工厂模式学习的总结. 看完视频和文章之后要自己表述工厂模式,总是感觉无从说起,不知道怎么去定义工厂模式,反复看了几遍之后终于理解一点. 自己理解工厂模式是通过这两种模式的特点来理解和定义的 ...

  5. 设计模式--责任链模式--Java实现

    设计模式–责任链模式–Java实现 责任链模式–链式数据结构–内存消耗–Java的awt事件一开始用责任链模式后来改为观察者模式–为什么呢?–现在的应用–dom事件–异常处理机制-过滤器链–等等 学习 ...

  6. java责任链模式_java中责任链模式详解和使用方法

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...

  7. Java设计模式-责任链模式

    Java设计模式-责任链模式,我想这是值得你了解一下下的啦. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持 ...

  8. 设计模式 | 责任链模式及典型应用

    本文的主要内容: 介绍责任链模式 请假流程示例 责任链模式总结 源码分析Tomcat Filter中的责任链模式 责任链模式 一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程 ...

  9. 工作中常用的设计模式 -- 责任链模式

    一般做业务开发,不太容易有大量使用设计模式的场景.这里总结一下在业务开发中使用较为频繁的设计模式.当然语言为 Java,基于 Spring 框架. 1 责任链模式(Chain of Responsib ...

最新文章

  1. C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
  2. Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态
  3. pom.xml中的常用依赖包总结
  4. Lucene.net常见功能实现知识汇总
  5. python pyusb库使用教程【在window10系统上操作USB】(操作Intel Realsense D435)
  6. 笔记:2016-06-02
  7. vi/vim 三种模式及命令 (简单粗暴,轻松搞懂)
  8. 影子的变化情况到底如何?和太阳又有什么关系?
  9. action无法传参数给html页面,HTML 解决form表单提交时,action url中参数无效问题
  10. 【转】SharePoint 中的编程模型
  11. js或css指定元素点击时内容不可被选中
  12. 22个HTML5和CSS3表单教程
  13. 协同过滤推荐算法总结(转载)
  14. 画java类图_java UML类图的使用
  15. 【转】【公司调查】车来了APP
  16. 支付宝推“移动花卡”:花呗账单延后还
  17. Hive 到底有什么用?
  18. 链表和动态申请内存空间
  19. python 标准库 书籍_《Python标准库》Python语言的权威之作
  20. 使用博客园做MarkDown图床

热门文章

  1. 细粒度分类之NTS_NET解读
  2. Camera2架构学习(二)——CameraServer和CameraProvider的启动初始化
  3. 纸壳CMS可视化建站系统创建多语言网站
  4. JDO及相关资源介绍
  5. CSV转数组、CSV转JSON(JS+PHP双版本)
  6. 从 RDO到 ADO 的移植 (转)
  7. 手撕instanceof
  8. 字符串--分类统计字符个数(心得+知识点)
  9. pta—紧急救援 (dijkstra)
  10. 【读书分享】读《设计中的设计》有感