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程序设计有所帮助。

相关文章

  • SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理

    SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理

    Spring Boot中提供了默认的监听器容器,但是有时候我们需要自定义监听器容器,来满足一些特殊的需求,比如批量获取数据,这篇文章主要介绍了SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理,需要的朋友可以参考下
    2023-04-04
  • 浅谈Spring6中的反射机制

    浅谈Spring6中的反射机制

    Java反射机制是Java语言中一种动态(运行时)访问、检测、修改它本身的能力,主要作用是动态(运行时)获取类的完整结构信息、调用对象的方法,需要的朋友可以参考下
    2023-05-05
  • Java判断字符串是否是整数或者浮点数的方法

    Java判断字符串是否是整数或者浮点数的方法

    今天小编就为大家分享一篇Java判断字符串是否是整数或者浮点数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 关闭支付宝小额免密支付步骤详解

    关闭支付宝小额免密支付步骤详解

    支付宝现在作为我们日常生活中最常用的应用之一,已经成为了人们的虚拟钱包。但是最近,有人发现了支付宝的一个漏洞,本文将对如何关闭小额免密支付进行步骤介绍。下面跟着小编一起来看下吧
    2017-01-01
  • Spring Security配置多个数据源并添加登录验证码的实例代码

    Spring Security配置多个数据源并添加登录验证码的实例代码

    这篇文章主要介绍了Spring Security配置多个数据源并添加登录验证码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 详解IDEA的快捷键及智能提示

    详解IDEA的快捷键及智能提示

    这篇文章主要介绍了详解IDEA的快捷键及智能提示,文中有非常详细的快捷键及智能提示的说明,对正在使用IDEA的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Spring Security、oauth2、单点登陆SSO的关系详解

    Spring Security、oauth2、单点登陆SSO的关系详解

    这篇文章主要介绍了Spring Security、oauth2、单点登陆SSO的关系,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Java Jackson之ObjectMapper常用用法总结

    Java Jackson之ObjectMapper常用用法总结

    这篇文章主要给大家介绍了关于Java Jackson之ObjectMapper常用用法的相关资料,ObjectMapper是一个Java库,用于将JSON字符串转换为Java对象或将Java对象转换为JSON字符串,需要的朋友可以参考下
    2024-01-01
  • Springboot Session共享实现原理及代码实例

    Springboot Session共享实现原理及代码实例

    这篇文章主要介绍了Springboot Session共享实现原理及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java Web程序实现返回JSON字符串的方法总结

    Java Web程序实现返回JSON字符串的方法总结

    Java Web服务器端只要把Java对象数据转成JSON字符串,把JSON字符串以文本的形式通过response输出即可,
    2016-05-05

最新评论