Java设计模式——责任链模式(Chain of Responsibility)
来源:互联网 发布:监控员工上网的软件 编辑:程序博客网 时间:2024/06/16 06:27
责任链
责任链模式通俗来说就是关联一串能够处理事务的对象,使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。【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);}
大佬们处理的“邮件”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; }}
【处理垃圾信息的管家】
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); } }}
【处理负面新闻的大妮】
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); } }}
【御用创作文人方文山】
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); } }}
【周杰伦亲自出马】
public class JayHanlder extends Handler { @Override Response handlerRequest(String msgChain) { return new Response("媳妇,别闹", "周杰伦"); }}
看一下客户端的处理
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());
总结
责任链模式其实就是一个灵活版的if…else…语句,它就是将这些判定条件的语句放到了各个处理类中
责任链优点
- 解耦请求者和发送者。
- 简化具体责任对象,因为它不知道链的结构,只要处理自己对应的工作即可。
- 可以动态的增加或者删除责任对象。
责任链缺点
- 并不能保证请求一定会被执行,可能落到链尾之外【可以是优点也可以是缺点】
- 如果出错,不太容易除错。可能需要到每个具体的责任对象一 一排查。
- 一个责任链需要整个具体责任链对象遍历,然后设置不同的层级。
阅读全文
0 0
- JAVA设计模式—责任链模式(Chain Of Responsibility)
- 设计模式——责任链模式(Chain Of Responsibility)
- 设计模式——责任链(Chain of Responsibility)
- Java设计模式----责任链模式(Chain of Responsibility)
- Java设计模式--责任链模式(Chain of Responsibility)
- Java设计模式--责任链模式【Chain of Responsibility Pattern】
- java设计模式17——责任链模式(Chain of Responsibility)
- Java设计模式——Chain of Responsibility(责任链)模式
- java设计模式——责任链模式(Chain of Responsibility Pattern)
- Java面向对象设计模式(十七)——责任链模式(Chain of Responsibility)
- Java设计模式——责任链模式(Chain of Responsibility)
- Java设计模式——责任链模式(Chain of Responsibility Pattern)
- java设计模式(十六)——责任链模式(Chain of Responsibility)
- JAVA设计模式(17) —<行为型>责任链模式(Chain of Responsibility)
- 【Java设计模式】(3)责任链Chain of Responsibility
- java设计模式--责任链 Chain of Responsibility
- Java责任链模式(Chain of Responsibility)
- 责任链模式(Chain of Responsibility) Java
- springboot 笔记
- 最基础的Arcgis for javascript 应用记录
- 【推荐】微服务大型分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis
- Javascript-2
- Android RxJava详解(五)
- Java设计模式——责任链模式(Chain of Responsibility)
- 计算广告学总结
- Java设计模式——适配器模式
- iOS 二维码扫描 原生版
- HTML5 Web SQL 对数据库的操作
- 001. Spring HelloWorld
- Android系统机制
- Window7搭建Telnet服务器
- PyQt-3