欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 谁该处理我的请假?——责任链模式

谁该处理我的请假?——责任链模式

2025/9/2 1:37:48 来源:https://blog.csdn.net/qq_45464560/article/details/147029706  浏览:    关键词:谁该处理我的请假?——责任链模式

谁该处理我的请假?——责任链模式

  • 一、生活中的责任链:请假审批流程
  • 二、责任链模式的核心特点
  • 三、代码实现:请假审批责任链
  • 四、工作中的实际应用场景
  • 五、框架中的经典应用
  • 六、模式本质理解

在这里插入图片描述

一、生活中的责任链:请假审批流程

想象一个公司请假流程:员工提交申请后,1天内小组长审批,1-3天需部门经理审批,超过3天由CTO审批。每个审批人只关注自己权限范围内的请求,若超出权限则自动转交下一级。这种"接力式处理"的机制,就是责任链模式的典型应用

二、责任链模式的核心特点

特点:

  • 解耦性强:请求发送者无需知道具体处理者,处理者之间无需知道彼此的存在。(员工只需提交申请,无需关心谁来审批)
  • 动态扩展灵活:新增审批环节只需添加新处理器,无需修改原有代码。(增加HR总监审批只需新增一个Handler)
  • 职责单一:每个处理者只处理自己职责范围内的任务。(小组长不处理超过1天的申请)

缺点注意点:

  • 长链条可能影响性能
  • 客户端需正确配置链条,否则易出错
  • 请求可能未被处理(如责任链断裂)

三、代码实现:请假审批责任链

完整代码示例:

// 抽象审批处理器
public abstract class ApproveHandler {protected ApproveHandler next; // 链式关键:保存下一个节点public void setNext(ApproveHandler next) {this.next = next;}public abstract void handleRequest(int days);
}// 小组长审批(处理1天以内)
public class GroupLeaderHandler extends ApproveHandler {@Overridepublic void handleRequest(int days) {if (days <= 1) {System.out.println("小组长审批通过:请假" + days + "天");} else if (next != null) {next.handleRequest(days); // 转交下一节点}}
}// 部门经理审批(处理1-3天)
public class DeptManagerHandler extends ApproveHandler {@Overridepublic void handleRequest(int days) {if (days > 1 && days <= 3) {System.out.println("部门经理审批通过:请假" + days + "天");} else if (next != null) {next.handleRequest(days);}}
}// CTO审批(处理3天以上)
public class CTOHandler extends ApproveHandler {@Overridepublic void handleRequest(int days) {if (days > 3) {System.out.println("CTO审批通过:请假" + days + "天");} else if (next != null) {next.handleRequest(days);}}
}// 客户端调用
public class Client {public static void main(String[] args) {// 构建责任链ApproveHandler groupLeader = new GroupLeaderHandler();ApproveHandler deptManager = new DeptManagerHandler();ApproveHandler cto = new CTOHandler();groupLeader.setNext(deptManager);deptManager.setNext(cto);// 发起请假请求groupLeader.handleRequest(2);  // 部门经理处理groupLeader.handleRequest(5);  // CTO处理}
}

输出结果:

部门经理审批通过:请假2天  
CTO审批通过:请假5

四、工作中的实际应用场景

多级审批系统

  • 请假、报销、采购等流程审批
  • 敏感操作需多级领导确认(如服务器重启)

数据校验链

  • 用户注册时的非空校验、格式校验、重复性校验
  • 金融交易前的风控规则校验

异常处理机制

  • 程序异常捕获时,逐级尝试恢复策略
  • 网络请求失败后的重试机制(如先重试3次,再切换备用服务器)

五、框架中的经典应用

Servlet Filter

请求依次经过编码过滤器、权限过滤器、日志过滤器等

public class LogFilter implements Filter {public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {System.out.println("请求开始时间:" + new Date());chain.doFilter(req, res); // 传递给下一个FilterSystem.out.println("请求结束时间:" + new Date());}
}

Spring Interceptor

拦截器链实现权限检查、参数预处理等

public class AuthInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {if (!checkToken(request)) {return false; // 中断请求}return true; // 继续传递}
}

日志级别处理

DEBUG→INFO→WARN→ERROR逐级传递,直到找到匹配级别的处理器

六、模式本质理解

责任链模式像一场流程接力赛

  • 每个选手(处理器)专注自己的赛道(业务范围)
  • 接力棒(请求)自动传递给下个选手
  • 裁判(客户端)只需发令,无需干预比赛过程

这种设计让复杂流程变得像搭积木一样灵活,是处理多层级、多条件业务的利器。通过合理运用,能显著提升代码的可维护性和扩展性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词