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

【设计模式】责任链模式

责任链模式属于行为型设计模式,核心思想是将请求的发送者与接收者进行解耦,构建一条由多个处理对象组成的链式结构。每个处理者决定是否能够处理该对象,否则将其传递给下一个节点进行处理。发送者不知道并不知道由谁来处理

使用场景

  • 当有多个对象可以处理请求,有对象自行决定是否处理
  • 工作流引擎:请假流程、报销流程等
  • 过滤器模式:对请求或者数据进行过滤
  • 权限设计:对用户角色的验证

核心组件

  • 抽象处理者:Handler
    • 定义了处理请求的接口,并维护下一个处理对象的引用
    • setNext():下一节点
    • handleRequest():处理请求
public interface Handler{
	void setNext(Handler next);
	void handleRequest(Object obj);
}
  • 具体处理者:Concrete Handler
    • 实现抽象接口,定义具体的处理逻辑
    • 当前对象无法处理则交由下一级进行处理
public class ConcreteHandler implements Handler{
	private Handler next
	@Override
	public void setNext(Handler next){
		this.next= next;
	}

	@Override
	public void handleRequest(Object obj) {
        if (validate(obj)) {
            System.out.println("参数校验通过");
            if (next != null) next.handleRequest(obj);
        } else {
            System.out.println("参数不合法,终止流程");
        }
    }
    private boolean validate(Object obj) {
		//具体校验逻辑
	}
}
  • 客户端:Client
    • 负责将所有的处理对象组装成处理链,客户端无需知晓链的具体结构,只要将请求发送给责任链的第一个处理者即可。

类图

image

  • Handler:抽象类
  • FirstHandler:实现类
  • HandlerClient:客户端类
//抽象类
public interface Handler {  
  
    //下一个处理节点  
    void setNext(Handler next);  
  
    void handleRequest(Object obj);  
}

//实现类
public class FirstHandler implements Handler{  
  
    private Handler next;  
  
    @Override  
    public void setNext(Handler next) {  
        this.next = next;  
    }  
  
    @Override  
    public void handleRequest(Object obj) {  
        if (validate(obj)) {  
            System.out.println("参数校验通过");  
            if (next != null) next.handleRequest(obj);  
        } else {  
            System.out.println("参数不合法,终止流程");  
        }  
    }  
  
    private boolean validate(Object obj) {  
        return Objects.nonNull(obj);  
    }  
}


//客户端类

public class HandlerClient {  
  
  
    public static void main(String[] args) {  
        Handler first = new FirstHandler();  
        Handler second = new SecondHandler();  
        Handler third = new ThirdHandler();  
  
        first.setNext(second);  
        second.setNext(third);  
  
  
        Object object = new Object();  
  
        first.handleRequest(object);  
    }  
  
}

模式的优缺点

优点

  • 解耦请求发送者和接受者
  • 能够动态调整链结构,运行过程中添加或者移除节点
  • 支持多层级处理,例如对请求编码、鉴权、限流

缺点

  • 请求可能不满足所有节点,需要单独处理
  • 链结构过长影响性能

总结

使用责任链模型将复杂的处理逻辑拆分为独立的单元,可以动态的进行增删,提高了系统的灵活性和可维护性。

相关文章:

  • 模型 阿米巴模式
  • 信息安全专业优秀毕业设计选题题目汇总:课题建议
  • react-create-app整合windicss
  • 计算机视觉(CV)技术的优势和挑战
  • 2025.3.26总结
  • Camera控制:你需要掌握的理论基础
  • 医院管理系统(源码)分享
  • TCP/IP的网络连接设备
  • 重生细胞全符文获取攻略
  • 基于Spring Boot的成绩管理系统后台实现
  • 【智能体】从一个聊天工作流了解LangGraph
  • LLM - R1 强化学习 DRPO 策略优化 DAPO 与 Dr. GRPO 算法 教程
  • Mean Shift 图像分割与 Canny 边缘检测教程
  • 如何使用动作捕捉系统训练人形机器人
  • Apache Iceberg 解析,一文了解Iceberg定义、应用及未来发展
  • Logback使用和常用配置
  • 适配器模式及其典型应用
  • 【C++网络编程】第9篇:安全网络编程(TLS/SSL)
  • 【银河麒麟系统常识】命令:dotnet build(编译)
  • IsaacLab最新2025教程(7)-引入IK solver控制机器人
  • 首届上海老年学习课程展将在今年10月举办
  • 圆桌丨中俄权威专家详解:两国携手维护战后国际秩序,捍卫国际公平正义
  • 上任后首访,德国总理与法国总统举行会晤
  • 全国铁路五一假期累计发送1.51亿人次,多项运输指标创历史新高
  • 专访|李沁云:精神分析不会告诉你“应该怎么做”,但是……
  • 为什么所有动物里,只有人类幼崽发育得这么慢?