Java责任链模式定义与用法分析
本文实例讲述了Java责任链模式定义与用法。分享给大家供大家参考,具体如下:
使很多对象都有处理请求的机会,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
责任链模式主要包括以下几个角色
1、处理者:处理者是一个接口,负责规定具体处理者处理用户请求的方法以及具体处理者设置后继处理对象的方法
2、具体处理者:具体处理者是实现处理接口的类的实例,具体处理者通过调用处理接口规定的方法处理用户的请求,既在接到用户的请求后,处理者将调用接口规定的方法,在执行该方法的过程中,如果发现能处理用户的请求,就处理用户的请求。如果发现处理不了就交给下一个处理者进行处理。
例如一个图书检索的程序,根据图书类别将图书分为了N个种类,然后创建若干个种类的对象,每个对象对一个种类进行检索。为了能更好的管理这些对象,可以将这额对象组织成一个责任链,当用户需要鉴定书籍时,系统可以让责任链上的第一个对象来处理用户的请求,这个对象首先检索自己是否能够处理用户的请求,如果能处理就反馈并返回处理内容。如果不能处理则交给下一个处理对象进行处理。
package org.zhy.design.demo; /** * 处理接口 * @author zhengyi * */ public interface Handler { //根据书的ID进行检索 public abstract void Search(int id); //下一个处理者 参数为实现处理接口的实现类 public abstract void nextHandler(Handler han); }
package org.zhy.design.demo; import java.util.ArrayList; import java.util.List; /** * 文学类的书籍检索 * @author zhengyi * */ public class WenXue implements Handler{ private Handler han;//下一个处理者 private List<Integer> list; //模拟文学类书籍的编号 public WenXue(){ list=new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); } @Override public void nextHandler(Handler han) { this.han=han; //给下一个处理者赋值 } @Override public void Search(int id) { if(list.contains(id)){ //检索list中是否存在此ID的书籍,如果存在则打印 System.out.println("恭喜您,您检索的书籍是文学类的"); }else{ //如果没有此书籍则交给下一个处理者进行处理 if(han!=null){ han.Search(id); } } } }
package org.zhy.design.demo; import java.util.ArrayList; import java.util.List; /** * 计算机类的书籍 * @author zhengyi * */ public class JiSuanJi implements Handler { private Handler han; private List<Integer> list; public JiSuanJi(){ list=new ArrayList<Integer>(); list.add(6); list.add(7); list.add(8); list.add(9); list.add(10); } @Override public void nextHandler(Handler han) { this.han=han; } @Override public void Search(int id) { if(list.contains(id)){ System.out.println("恭喜你,记在计算机类"); }else{ if(han!=null){ han.Search(id); } } } }
package org.zhy.design.demo; public class Appliction { private Handler jisuanji,wenxue; public void createHandler(){ jisuanji=new JiSuanJi(); wenxue=new WenXue(); jisuanji.nextHandler(wenxue); //指定下一个处理者 } public void search(int id){ jisuanji.Search(id); //第一个处理者进行筛选处理 } public static void main(String[] args) { Appliction app=new Appliction(); app.createHandler(); app.search(10); } }
适合使用责任链模式的情况
1、在许多对象可以处理用户请求的时候
2、希望用户不必明确处理者的时候,同时向多个处理者发送请求
3、程序希望动态的订制可处理用户请求的集合对象
希望本文所述对大家java程序设计有所帮助。
相关文章
SpringCloudGateway使用Skywalking时日志打印traceId解析
这篇文章主要为大家介绍了SpringCloudGateway使用Skywalking时日志打印traceId解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-06-06Java并发系列之AbstractQueuedSynchronizer源码分析(独占模式)
这篇文章主要为大家详细介绍了Java并发系列之AbstractQueuedSynchronizer源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-02-02SpringBoot将logback替换成log4j2的操作步骤
文章介绍了如何在SpringBoot项目中将默认的日志框架logback替换为log4j2,以利用log4j2的高性能异步日志记录特性,特别是通过Disruptor实现的无锁化队列,提高了日志处理速度,同时,文章提供了详细的配置步骤,需要的朋友可以参考下2024-10-10
最新评论