Java责任链模式定义与用法分析

 更新时间:2017年06月07日 08:16:52   作者:qq7342272  
这篇文章主要介绍了Java责任链模式定义与用法,结合具体实例分析了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解析

    这篇文章主要为大家介绍了SpringCloudGateway使用Skywalking时日志打印traceId解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Spring实现泛型注入的示例详解

    Spring实现泛型注入的示例详解

    Spring 4.0版本中更新了很多新功能,其中比较重要的一个就是对带泛型的Bean进行依赖注入的支持。本文将通过实例详细讲讲Spring如何实现泛型注入,需要的可以参考一下
    2022-07-07
  • Java并发系列之AbstractQueuedSynchronizer源码分析(独占模式)

    Java并发系列之AbstractQueuedSynchronizer源码分析(独占模式)

    这篇文章主要为大家详细介绍了Java并发系列之AbstractQueuedSynchronizer源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Java实现数组转字符串及字符串转数组的方法分析

    Java实现数组转字符串及字符串转数组的方法分析

    这篇文章主要介绍了Java实现数组转字符串及字符串转数组的方法,结合实例形式分析了Java字符串及数组相关的分割、遍历、追加等操作技巧,需要的朋友可以参考下
    2018-06-06
  • java使用sigar 遇到问题的快速解决方法

    java使用sigar 遇到问题的快速解决方法

    下面小编就为大家带来一篇java使用sigar 遇到问题的快速解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • SpringBoot将logback替换成log4j2的操作步骤

    SpringBoot将logback替换成log4j2的操作步骤

    文章介绍了如何在SpringBoot项目中将默认的日志框架logback替换为log4j2,以利用log4j2的高性能异步日志记录特性,特别是通过Disruptor实现的无锁化队列,提高了日志处理速度,同时,文章提供了详细的配置步骤,需要的朋友可以参考下
    2024-10-10
  • Spring Boot如何监控SQL运行情况?

    Spring Boot如何监控SQL运行情况?

    Druid是Java语言中最好的数据库连接池,下面这篇文章主要给大家介绍了关于Spring Boot如何监控SQL运行情况的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Java精品项目瑞吉外卖之新增菜品与分页查询篇

    Java精品项目瑞吉外卖之新增菜品与分页查询篇

    这篇文章主要为大家详细介绍了java精品项目-瑞吉外卖订餐系统,此项目过大,分为多章独立讲解,本篇内容为新增菜品和分页查询功能的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 深入理解Spring事务的传播行为

    深入理解Spring事务的传播行为

    Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。下面这篇文章主要给大家介绍了关于Spring事务传播行为的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • 如何实现java Iterator迭代器功能

    如何实现java Iterator迭代器功能

    这篇文章主要介绍了如何实现java Iterator迭代器功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01

最新评论