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

发布时间 - 2026-01-11 01:46:01    点击率:

本文实例讲述了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程序设计有所帮助。


# Java  # 责任链  # 模式  # Java设计模式之责任链模式(Chain of Responsibility模式)介绍  # Java 中责任链模式实现的三种方式  # 详解Java实现设计模式之责任链模式  # Java责任链模式详解  # JAVA设计模式之责任链模式详解  # Java设计模式之责任链模式简介  # java设计模式(实战)-责任链模式  # Java责任链设计模式  # Java实现设计模式之责任链模式  # Java责任链模式的实现方法详解  # 第一个  # 是一个  # 几个  # 都有  # 多个  # 这条  # 给大家  # 如果没有  # 主要包括  # 所述  # 程序设计  # 恭喜你  # 是否存在  # 是否能够  # 订制  # 过程中  # 有一个  # 若干个  # 讲述了  # 在接到 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python数据仓库与ETL构建实战_Airflow调度流程详解  大学网站设计制作软件有哪些,如何将网站制作成自己app?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  清除minerd进程的简单方法  Python结构化数据采集_字段抽取解析【教程】  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  ,在苏州找工作,上哪个网站比较好?  Mybatis 中的insertOrUpdate操作  如何快速搭建支持数据库操作的智能建站平台?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel Session怎么存储_Laravel Session驱动配置详解  Linux安全能力提升路径_长期防护思维说明【指导】  如何快速生成ASP一键建站模板并优化安全性?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何快速辨别茅台真假?关键步骤解析  EditPlus中的正则表达式 实战(1)  黑客如何通过漏洞一步步攻陷网站服务器?  制作旅游网站html,怎样注册旅游网站?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  如何用PHP快速搭建CMS系统?  Laravel如何实现事件和监听器?(Event & Listener实战)  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Java垃圾回收器的方法和原理总结  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何用IIS7快速搭建并优化网站站点?  如何做网站制作流程,*游戏网站怎么搭建?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  WEB开发之注册页面验证码倒计时代码的实现  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  详解MySQL数据库的安装与密码配置  如何自定义建站之星网站的导航菜单样式?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  创业网站制作流程,创业网站可靠吗?  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  深圳网站制作培训,深圳哪些招聘网站比较好?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  高防服务器:AI智能防御DDoS攻击与数据安全保障  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  制作电商网页,电商供应链怎么做?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何快速搭建虚拟主机网站?新手必看指南