设计模式——责任链模式
责任链模式 (Chain of Responsibility Pattern)什么是责任链模式责任链模式是一种行为型设计模式它允许你将请求沿着处理者链传递直到有一个处理者能够处理该请求。简单来说责任链模式就是踢皮球一个处理不了就传给下一个。生活中的例子想象一下审批流程员工请假 → 部门经理 → 人事经理 → 总经理客服系统一级客服 → 二级客服 → 技术支持异常处理try → catch → finally为什么需要责任链模式传统方式的问题// 使用if-else处理if(level1){manager1.handle();}elseif(level2){manager2.handle();}elseif(level3){manager3.handle();}问题代码臃肿大量if-else导致代码臃肿难以扩展新增处理者需要修改代码耦合度高客户端与所有处理者耦合责任链模式的优势// 使用责任链handler1.setNext(handler2);handler2.setNext(handler3);handler1.handle(request);优势解耦合发送者和接收者解耦灵活扩展可以灵活地添加或删除处理者动态组合可以动态地组合处理者链责任链模式的结构┌─────────────────────┐ │ Handler │ 处理者接口 ├─────────────────────┤ │ - next: Handler │ │ setNext(): void │ │ handle(): void │ └──────────┬──────────┘ │ 继承 ├──┬──────────────────┬──────────────┐ │ │ │ ┌──────────┴──────┐ ┌───────────┴───────┐ ┌───┴────────┐ │ ConcreteHandler1│ │ ConcreteHandler2 │ │ ... │ 具体处理者 ├─────────────────┤ ├───────────────────┤ ├────────────┤ │ handle() │ │ handle() │ │ │ └─────────────────┘ └───────────────────┘ └────────────┘代码示例1. 定义处理者接口/** * 抽象处理者请假审批 */publicabstractclassLeaveApproval{protectedLeaveApprovalnext;protectedStringname;publicLeaveApproval(Stringname){this.namename;}publicvoidsetNext(LeaveApprovalnext){this.nextnext;}/** * 处理请假请求 * param days 请假天数 */publicabstractvoidhandle(intdays);}2. 定义具体处理者/** * 具体处理者主管 */publicclassSupervisorextendsLeaveApproval{publicSupervisor(Stringname){super(name);}Overridepublicvoidhandle(intdays){if(days3){System.out.println(name批准了days天的请假);}elseif(next!null){next.handle(days);}else{System.out.println(无人能处理days天的请假);}}}/** * 具体处理者经理 */publicclassManagerextendsLeaveApproval{publicManager(Stringname){super(name);}Overridepublicvoidhandle(intdays){if(days7){System.out.println(name批准了days天的请假);}elseif(next!null){next.handle(days);}else{System.out.println(无人能处理days天的请假);}}}/** * 具体处理者总监 */publicclassDirectorextendsLeaveApproval{publicDirector(Stringname){super(name);}Overridepublicvoidhandle(intdays){if(days14){System.out.println(name批准了days天的请假);}elseif(next!null){next.handle(days);}else{System.out.println(无人能处理days天的请假);}}}/** * 具体处理者CEO */publicclassCEOextendsLeaveApproval{publicCEO(Stringname){super(name);}Overridepublicvoidhandle(intdays){if(days30){System.out.println(name批准了days天的请假);}else{System.out.println(无人能处理days天的请假);}}}3. 使用责任链/** * 责任链模式测试类 * 演示如何使用责任链模式处理请假审批 */publicclassChainOfResponsibilityTest{publicstaticvoidmain(String[]args){System.out.println( 责任链模式测试 \n);// 创建处理者LeaveApprovalsupervisornewSupervisor(主管);LeaveApprovalmanagernewManager(经理);LeaveApprovaldirectornewDirector(总监);LeaveApprovalceonewCEO(CEO);// 设置责任链supervisor.setNext(manager);manager.setNext(director);director.setNext(ceo);// 测试不同天数的请假System.out.println(--- 请假1天 ---);supervisor.handle(1);System.out.println(\n--- 请假3天 ---);supervisor.handle(3);System.out.println(\n--- 请假7天 ---);supervisor.handle(7);System.out.println(\n--- 请假15天 ---);supervisor.handle(15);System.out.println(\n--- 请假35天 ---);supervisor.handle(35);System.out.println(\n 责任链模式的优势 );System.out.println(1. 解耦合发送者和接收者解耦);System.out.println(2. 灵活扩展可以灵活地添加或删除处理者);System.out.println(3. 动态组合可以动态地组合处理者链);System.out.println(4. 简化代码简化客户端代码);System.out.println(\n 实际应用场景 );System.out.println(1. 审批流程请假审批、报销审批);System.out.println(2. 异常处理异常处理链);System.out.println(3. 日志处理日志处理链);System.out.println(4. 事件处理事件处理链);}}责任链模式的优点解耦合发送者和接收者解耦灵活扩展可以灵活地添加或删除处理者动态组合可以动态地组合处理者链简化代码简化客户端代码责任链模式的缺点性能问题请求可能沿着链传递多次调试困难难以追踪请求的处理过程链断裂如果链断裂请求可能无法被处理适用场景多个处理者有多个对象可以处理请求不确定处理者不确定哪个对象可以处理请求动态指定需要动态指定处理者常见应用场景审批流程请假审批、报销审批异常处理异常处理链日志处理日志处理链使用建议多个处理者使用责任链模式不确定处理者使用责任链模式单一处理者直接使用即可注意事项⚠️ 责任链模式虽然有用但要注意不要让链太长影响性能确保链不会断裂

相关新闻

某市“十五五“地下综合管廊智能化运维管理平台建设全案解析:从数字孪生到信创适配的深度实践(WORD)

某市“十五五“地下综合管廊智能化运维管理平台建设全案解析:从数字孪生到信创适配的深度实践(WORD)

摘要:本文深度拆解某市"十五五"期间地下综合管廊智能化运维管理平台的完整建设方案,涵盖从微服务架构设计、BIMGIS数字孪生底座构建,到全栈信创适配与等保三级安全体系落地的全流程。针对管廊运维中"感知碎片化、预警滞后、应…

2026/7/8 16:22:45 阅读更多 →
2026毕设ssm+vue某餐厅点餐管理系统论文+程序

2026毕设ssm+vue某餐厅点餐管理系统论文+程序

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。 系统程序文件列表 开题报告内容 选题背景 关于餐饮信息化管理问题的研究,现有研究主要以大型连锁餐饮ERP系统或第三方平台(如美团、饿了么&am…

2026/7/6 9:03:04 阅读更多 →
开关磁阻电机控制仿真之旅(Matlab 2016版)

开关磁阻电机控制仿真之旅(Matlab 2016版)

开关磁阻电机控制仿真(matlab2016) 模型包涵: 开关磁阻电机传统控制:电流斩波控制、电压PWM控制、角度位置控制。 智能控制:6/4三相开关磁阻电机有限元分析本体建模、转矩分配函数控制、模糊PID控制在电机控制的广阔天地里,开关磁…

2026/7/6 17:42:29 阅读更多 →

最新新闻

Winlator触控映射技术深度解密:如何让Android屏幕变成精准的Windows鼠标

Winlator触控映射技术深度解密:如何让Android屏幕变成精准的Windows鼠标

Winlator触控映射技术深度解密:如何让Android屏幕变成精准的Windows鼠标 【免费下载链接】winlator Android application for running Windows applications with Wine and Box86/Box64 项目地址: https://gitcode.com/GitHub_Trending/wi/winlator 想象一下…

2026/7/8 16:20:33 阅读更多 →
Unity战争迷雾系统:从基础原理到进阶优化实战指南

Unity战争迷雾系统:从基础原理到进阶优化实战指南

1. 项目概述:战争迷雾在Unity中的核心价值与挑战在策略游戏、RTS(即时战略)或者一些带有探索元素的RPG中,战争迷雾是一个能极大提升游戏沉浸感和策略深度的核心机制。它模拟了现实战争中“未知区域”的概念,玩家只能看…

2026/7/8 16:20:33 阅读更多 →
Python神经网络编程(六):神经网络内部原理探索

Python神经网络编程(六):神经网络内部原理探索

Python神经网络编程(六):神经网络内部原理探索# 本文是《Python神经网络编程》系列博客的第6篇,基于真实服务器实操输出,涵盖实验10的所有内容。 服务器环境:Ubuntu 24.04 / Python 3.12.3 / NumPy 2.5.1 /…

2026/7/8 16:20:33 阅读更多 →
用Cheat Engine修改《植物大战僵尸》:从内存扫描到逆向工程入门

用Cheat Engine修改《植物大战僵尸》:从内存扫描到逆向工程入门

1. 项目概述:当游戏修改器遇上经典塔防 如果你玩过《植物大战僵尸》,大概率对那永远不够用的阳光和关键时刻卡壳的子弹记忆犹新。作为一个从学生时代就热衷于“研究”游戏机制的玩家,我始终觉得,理解一个游戏如何运作,…

2026/7/8 16:18:32 阅读更多 →
解决Windows 10下PL2303驱动问题的完整指南:让老旧串口设备重获新生

解决Windows 10下PL2303驱动问题的完整指南:让老旧串口设备重获新生

解决Windows 10下PL2303驱动问题的完整指南:让老旧串口设备重获新生 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 你是否遇到过Windows 10系统无法识别PL…

2026/7/8 16:18:32 阅读更多 →
MATLAB双频域水印实验包:DCT+DWT嵌入提取+攻击测试+质量评估

MATLAB双频域水印实验包:DCT+DWT嵌入提取+攻击测试+质量评估

本文还有配套的精品资源,点击获取 简介:直接运行就能做数字水印实验的MATLAB工具集,内置离散余弦变换(DCT)和离散小波变换(DWT)两套完整水印流程。主脚本watermark.m支持把logo图像&#xff…

2026/7/8 16:16:31 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻