当前位置: 首页 > news >正文

java设计模式 -【责任链模式】

责任链模式定义

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,允许将请求沿着处理链传递,直到有一个处理者能够处理该请求。这种模式解耦了请求的发送者和接收者,允许多个对象有机会处理请求,责任链模式通过分离请求和处理逻辑,提供了一种灵活的任务分配机制,适用于需要动态指定处理对象的场景。

核心组件

Handler(抽象处理者)

定义处理请求的接口,通常包含一个指向下一个处理者的引用(后继者)

public abstract class Handler {protected Handler successor;public void setSuccessor(Handler successor) {this.successor = successor;}public abstract void handleRequest(Request request);
}

ConcreteHandler(具体处理者)

实现抽象处理者的接口,决定是否处理请求或将其传递给链中的下一个处理者

public class ConcreteHandlerA extends Handler {@Overridepublic void handleRequest(Request request) {if (request.getType().equals("TypeA")) {// 处理请求} else if (successor != null) {successor.handleRequest(request);}}
}

Request(请求)

封装请求的细节,通常包含处理所需的参数或类型

public class Request {private String type;// 其他字段及方法
}

典型应用场景

多级审批流程:如请假审批需经过部门经理、HR、CEO等层级。
事件处理系统:如GUI中的事件冒泡机制。
日志过滤:不同级别的日志(DEBUG、INFO、ERROR)由不同处理器处理。

示例代码

以下是一个简单责任链实现:

// 抽象处理者
abstract class Logger {public static int INFO = 1;public static int DEBUG = 2;protected int level;protected Logger nextLogger;public void setNextLogger(Logger nextLogger) {this.nextLogger = nextLogger;}public void logMessage(int level, String message) {if (this.level <= level) {write(message);}if (nextLogger != null) {nextLogger.logMessage(level, message);}}abstract protected void write(String message);
}// 具体处理者
class ConsoleLogger extends Logger {public ConsoleLogger(int level) {this.level = level;}@Overrideprotected void write(String message) {System.out.println("Console: " + message);}
}
http://www.lryc.cn/news/602509.html

相关文章:

  • 常见的未授权访问漏洞靶场-练习教程
  • 2.DRF 序列化器-Serializer
  • 从2025世界人工智能大会,看AI与算力的临界点突破
  • 【MySQL学习|黑马笔记|Day1】数据库概述,SQL|通用语法、SQL分类、DDL
  • DMETL安装流程及简单使用
  • 2025年人工智能三大突破:多模态推理、具身智能与全球治理
  • Java 数学工具类 Math
  • 实用工具类分享:BeanCopyUtils 实现对象深浅拷贝高效处理
  • 对于ui=f(state)的理解(react)
  • 基于springboot的大创管理系统(源码+论文+开题报告)
  • 【React Context API 优化与性能实践指南】
  • 【前端】React 与 Vue:前端两大框架的全方位对比解析
  • JVM 内存模型深度解析:原子性、可见性与有序性的实现
  • 如何给电脑换个ip地址?电脑换ip几种方法
  • 测试平台开发:自动化测试平台----需求分析
  • fmriprep安装与试用_附ubuntu分区大小调整
  • NAT地址转换,静态NAT,高级NAT,NAPT,easy IP
  • JAVA_EIGHTEEN_特殊文件
  • 使用 nvm (Node Version Manager) 来管理多个 Node.js 版本,并自由切换
  • 从文件到文件描述符:理解程序与文件的交互本质
  • 前端可智能识别的搜索组件 SearchBox 使用详解!
  • DOM编程:table表格开发常用属性和操作汇总
  • it is not annotated with @ClientEndpoint“
  • nginx日志分割
  • Webhook技术深度解析:从原理到实现全指南
  • Cloudflare CDN 中设置地域限制并返回特定界面
  • DNF 与 YUM 的区别详解:从 CentOS 7 到 CentOS 9 的演进
  • nuttx串口驱动框架设计
  • HCIP笔记(第一、二章)
  • 设计模式(十六)行为型:解释器模式详解