新闻详情

新闻详情

首页 / 资讯中心 / 详情

设计模式16-责任链模式:请求的传递与拦截

发布时间:2026/9/11 18:33:34来源:尧图网络
设计模式16-责任链模式:请求的传递与拦截
责任链模式让请求沿着一条链自己找主人审批流、过滤链、拦截器、异常兜底这些场景都适合把处理者串成一条链谁有资格处理就处理否则传给下一家。一、痛点写死在一处的层层判断报销审批规则经常是这样if(amount1000){return经理审批;}elseif(amount10000){return总监审批;}else{returnCEO 审批;}规则一多判断逻辑会膨胀而且规则可能随时变化比如 1000 到 5000 由经理处理5000 到 20000 由总监处理。每次改规则都要改核心方法。责任链模式的回答把每个处理者封装成独立节点节点自己决定“我能处理吗”不能处理就交给下一个节点。二、实现处理者抽象 → 具体处理者 → 链式组装第一步定义处理者抽象publicabstractclassApprover{protectedApprovernext;publicApproversetNext(Approvernext){this.nextnext;returnnext;}publicfinalStringapprove(longamount){if(canHandle(amount)){returnhandle(amount);}if(nextnull){return无人可以处理;}returnnext.approve(amount);}protectedabstractbooleancanHandle(longamount);protectedabstractStringhandle(longamount);}第二步实现具体处理者publicclassManagerApproverextendsApprover{OverrideprotectedbooleancanHandle(longamount){returnamount1000;}OverrideprotectedStringhandle(longamount){return经理审批通过: amount;}}publicclassDirectorApproverextendsApprover{OverrideprotectedbooleancanHandle(longamount){returnamount10000;}OverrideprotectedStringhandle(longamount){return总监审批通过: amount;}}publicclassCeoApproverextendsApprover{OverrideprotectedbooleancanHandle(longamount){returntrue;}OverrideprotectedStringhandle(longamount){returnCEO 审批通过: amount;}}第三步组装责任链ApprovermanagernewManagerApprover();ApproverdirectornewDirectorApprover();ApproverceonewCeoApprover();manager.setNext(director).setNext(ceo);System.out.println(manager.approve(500));// 经理审批通过System.out.println(manager.approve(5000));// 总监审批通过System.out.println(manager.approve(50000));// CEO 审批通过调用方只把请求交给链头后续由谁处理完全不用关心。三、责任链的核心能力责任链不只能“处理”还能做四件常见的事能力说明拦截当前节点有权拒绝请求不继续传递短路处理后不再传给后续节点传递当前节点处理一部分继续传给下一节点兜底链尾统一处理前面无人处理的情况Servlet Filter、Spring Interceptor、网关过滤器都是责任链思想的成熟实现。四、工程化提醒链的组装要显式避免每个节点自己偷偷持有下一个节点否则链路关系会变得隐晦注意链尾兜底生产上必须处理“无人认领”的情况否则请求会静默丢失链太长时考虑性能与可读性如果处理者只是简单函数可以退化为一个有序列表或函数式ListPredicate。小结责任链模式一句话请求自己找主人主人排成一队。它把多层 if-else 变成可独立维护、可动态组合的处理节点让新增规则不再改动核心分支。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Python异常处理是编程中非常重要的一个部分,它允许程序优雅地处理错误情况,而不是在遇到错误时简单地终止运行 2026/9/11 19:21:42

Python异常处理是编程中非常重要的一个部分,它允许程序优雅地处理错误情况,而不是在遇到错误时简单地终止运行

Python异常处理是编程中非常重要的一个部分,它允许程序优雅地处理错误情况,而不是在遇到错误时简单地终止运行。Python使用try和except语句块来捕获和处理异常。 一、异常类型 在Python中,异常是在程序运行时发生的错误,这些错误会…

阅读更多 →
CAN总线,踩坑三年攒下来的几句大实话 2026/9/11 19:21:42

CAN总线,踩坑三年攒下来的几句大实话

CAN这东西,刚接触的时候觉得挺玄乎,什么差分信号什么仲裁机制,课本上一堆名词。真上手调过几块板子、烧过几颗收发器之后,你会发现它骨子里就那么点事儿——一群节点挂在一根线上,谁着急谁先说,说完自己听一…

阅读更多 →
OmniRoute 卸载完全指南:内置卸载脚本、多方式手动清理与数据目录安全清除 2026/9/11 19:21:42

OmniRoute 卸载完全指南:内置卸载脚本、多方式手动清理与数据目录安全清除

OmniRoute 卸载完全指南:内置卸载脚本、多方式手动清理与数据目录安全清除 【免费下载链接】OmniRoute Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works …

阅读更多 →
Mach-O文件延迟绑定机制与__la_symbol_ptr节解析 2026/9/11 19:21:42

Mach-O文件延迟绑定机制与__la_symbol_ptr节解析

1. Mach-O文件格式与__la_symbol_ptr节概述Mach-O作为macOS和iOS系统可执行文件的标准格式,其结构设计直接影响了程序的加载和执行效率。在分析Mach-O文件时,__la_symbol_ptr(Lazy Symbol Pointer)节是一个关键的数据结构&#xf…

阅读更多 →
微信小程序校园闲置系统开发实践:从登录到订单的完整指南 2026/9/11 19:21:42

微信小程序校园闲置系统开发实践:从登录到订单的完整指南

简介:这是一套基于微信小程序的校园闲置平台毕业设计源码,面向计算机相关专业学生用于毕设参考或实战练习,适合课程设计、毕业设计答辩展示以及小程序开发初学者进阶学习,解决校园二手交易场景中的商品展示、下单购买、后台管理等…

阅读更多 →
exo 如何用 --no-worker 启动只负责网络与编排的 coordinator-only 节点? 2026/9/11 19:18:42

exo 如何用 --no-worker 启动只负责网络与编排的 coordinator-only 节点?

exo 如何用 --no-worker 启动只负责网络与编排的 coordinator-only 节点? 【免费下载链接】exo Run frontier AI locally. 项目地址: https://gitcode.com/GitHub_Trending/exo8/exo 在组建 exo 多设备 AI 集群时,你手里可能有一台机器&#xff1…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞