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

设计模式 之 责任链模式

一搜网上讲责任链的写法都感觉好复杂我用简单实现让你秒懂并马上用到项目里前言搜了一圈责任链模式的文章要么搬出 UML 类图画半天要么搞一堆Handler、HandlerChain、AbstractHandler层层嵌套看得人头大。今天分享一个我在实际项目中用的责任链实现总共就 3 个核心文件代码不超过 80 行看完直接就能抄到你的项目里。一、先说场景什么时候需要责任链当你发现代码里有这种结构时if(条件A){// 处理逻辑 A}elseif(条件B){// 处理逻辑 B}elseif(条件C){// 处理逻辑 C}else{// 默认处理}每加一个场景就要改这个if-else越写越长越改越乱。责任链就是把这个 if-else 拆成一个个独立的处理节点串起来依次执行。二、核心就 3 个东西角色作用对应文件接口定义干什么和下一个是谁ILogicChain抽象类帮你管好下一个的引用AbstractLogicChain实现类每个节点的具体逻辑ReBrushChain/ContextCacheChain/DefaultChain三、代码逐行拆解1. 接口 — 定义链的契约publicinterfaceILogicChain{// 核心方法处理业务逻辑ListShardingContextlogic(SalesOrderEnumtype,MageFilterfilter,MetaInfometa);// 获取下一个节点ILogicChainnext();// 追加下一个节点返回被追加的节点方便链式调用ILogicChainappendNext(ILogicChainnext);}关键点appendNext返回的是ILogicChain而不是void这样工厂里可以current current.appendNext(next)一路串下去。2. 抽象类 — 统一管理 next 引用Slf4jpublicabstractclassAbstractLogicChainimplementsILogicChain{privateILogicChainnext;OverridepublicILogicChainnext(){returnnext;}OverridepublicILogicChainappendNext(ILogicChainnext){this.nextnext;returnnext;// 返回下一个方便链式组装}// 子类可以标识自己的规则名protectedabstractStringrule();}就这么简单。next 的存取全在抽象类里子类完全不用关心链的维护。3. 实现类 — 每个节点只管自己的事节点 1反刷链优先级最高Order(1)publicclassReBrushChainextendsAbstractLogicChain{OverrideprotectedStringrule(){returnrebrush;}OverridepublicListShardingContextlogic(SalesOrderEnumtype,MageFilterfilter,MetaInfometa){// 命中我的场景 → 我处理直接返回if(meta.reBrush()){// ... 构建并返回 brushContextListreturnbrushContextList;}// 不命中 → 交给下一个returnnext().logic(type,filter,meta);}}节点 2上下文缓存链Order(2)publicclassContextCacheChainextendsAbstractLogicChain{OverrideprotectedStringrule(){returncontext_cache;}OverridepublicListShardingContextlogic(SalesOrderEnumtype,MageFilterfilter,MetaInfometa){ObjectcontextCacheValuefilter.getValue(CustomProperties.INTEGRATION_BATCH_SCOPE);// 命中 → 从缓存取 Scope直接返回if(null!contextCacheValue){// ... 构建并返回 contextListreturncontextList;}// 不命中 → 交给下一个returnnext().logic(type,filter,meta);}}节点 3默认链兜底Order(3)publicclassDefaultChainextendsAbstractLogicChain{OverrideprotectedStringrule(){returndefault;}OverridepublicListShardingContextlogic(SalesOrderEnumtype,MageFilterfilter,MetaInfometa){// 兜底节点直接查数据库拿 ScopeListProcessDataScopescopeListdb.get();returnscopeList;}}注意DefaultChain 没有调用next()因为它是最后一个节点。4. 工厂 — 把链组装起来publicclassScopeChainFactory{privatestaticfinalMapString,ILogicChainCHAIN_GROUPnewHashMap();static{CHAIN_GROUP.put(rebrush,newReBrushChain());CHAIN_GROUP.put(context_cache,newContextCacheChain());CHAIN_GROUP.put(default,newDefaultChain());}// 定义执行顺序privatestaticfinalString[]SCOPE_MODELSnewString[]{rebrush,context_cache};publicstaticILogicChainopenChain(){// 拿到头节点ILogicChainlogicChainCHAIN_GROUP.get(SCOPE_MODELS[0]);ILogicChaincurrentlogicChain;// 依次串起来for(inti1;iSCOPE_MODELS.length;i){ILogicChainnextChainCHAIN_GROUP.get(SCOPE_MODELS[i]);currentcurrent.appendNext(nextChain);}// default 兜底确保链不会断current.appendNext(CHAIN_GROUP.get(default));returnlogicChain;}}四、调用方怎么用一行代码ListShardingContextresultScopeChainFactory.openChain().logic(salesType,filter,metaInfo);调用方完全不用关心内部走了哪个节点链会自己判断。五、执行流程图调用入口 ↓ ReBrushChain (Order1) ├─ 命中反刷场景 → 处理并返回 └─ 没命中 → next() ↓ ContextCacheChain (Order2) ├─ 有上下文缓存 → 处理并返回 └─ 没有缓存 → next() ↓ DefaultChain (Order3, 兜底) └─ 查数据库拿 Scope → 处理并返回六、和网上的写法比简单在哪对比项网上的写法本文写法类的数量5-8 个Handler、Chain、Builder、Context…3 个接口、抽象类、实现类组装方式Builder 嵌套 / Spring 注入 List 再排序静态 Map 数组定义顺序传递方式封装一个 Context 对象层层传递方法参数直接传清晰明了终止条件各种 boolean 返回值判断命中就 return没命中就next()七、要加新节点怎么办3 步新建实现类继承AbstractLogicChain实现logic()方法在ScopeChainFactory的CHAIN_GROUP里注册在SCOPE_MODELS数组里加上它的位置完事。不用改任何已有代码符合开闭原则。总结责任链模式的本质就是把 if-else 变成一串独立节点每个节点自己决定我处理还是交给下一个。不需要复杂的框架不需要一堆辅助类。一个接口、一个抽象类、几个实现类、一个工厂就够了。直接抄到你的项目里把logic()方法的参数换成你自己的业务参数马上就能用。

相关文章:

设计模式 之 责任链模式

一搜网上讲责任链的写法都感觉好复杂?我用简单实现让你秒懂并马上用到项目里 前言 搜了一圈责任链模式的文章,要么搬出 UML 类图画半天,要么搞一堆 Handler、HandlerChain、AbstractHandler 层层嵌套,看得人头大。 今天分享一个我…...

211本科985硕拿下淘天AI二面!全程无代码,这面试题火了!

本文分享了作者在淘天AI应用开发二面中的面试经历,全程不到60分钟,没有手撕代码,也没有问常规Java八股。面试主要围绕自我介绍、AI相关问题、工程与安全问题、项目提问以及反问环节展开。AI相关问题涉及对AI的看法、常用AI工具等;…...

有哪些真正好用的降AIGC软件?能同时符合论文规范和压低AIGC数值的那种

毕业季、投稿季最让人焦虑的,莫过于论文查重率高企、AIGC痕迹明显。反复修改、反复检测不仅耗时费力,还容易越改越混乱。2026年高校与期刊双重审核已成定局,用对工具才能事半功倍。真正好用的降AIGC软件,不仅能降低AI痕迹&#xf…...

降AI率天花板!AI率92%暴降至5%!实测10款降AIGC平台!免费额度狂薅攻略

2026 年各大高校和期刊平台的 AI 检测系统又升级了,知网 AIGC、维普 AI、万方智能检测三大平台的算法迭代速度越来越快,上个月能蒙混过关的改写方式,这个月直接就会被标红预警。单纯的同义词替换、语序调整早就不管用了,想要有效降…...

2026年论文党必备:盘点2026年倾心之选的的降AIGC网站

轻松降低论文AI率在2026年已不再是天方夜谭。以下是2026年最炸裂、实测效果显著的降AIGC网站神器,覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景,帮你稳妥搞定毕业论文。 一、全流程王者:一站式搞定论文全链路 这类工具…...

AI检测率太高论文过不了?这4个降AI率平台2026年别再错过了

随着AI技术在学术领域的广泛应用,论文中的AI痕迹越来越容易被检测系统识别。如何有效降低AIGC率、去除AI痕迹,已成为众多学者和学生关注的焦点。依托权威检测平台数据、高校实测结果及用户真实反馈,本文将深入解析当前最值得尝试的降AI率工具…...

3个PDF编辑痛点,用这个免费工具轻松搞定!PDF补丁丁全面解析

3个PDF编辑痛点,用这个免费工具轻松搞定!PDF补丁丁全面解析 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目…...

Invoke-Obfuscation深度解析:PowerShell混淆技术的实战指南与防御策略

Invoke-Obfuscation深度解析:PowerShell混淆技术的实战指南与防御策略 【免费下载链接】Invoke-Obfuscation PowerShell Obfuscator 项目地址: https://gitcode.com/gh_mirrors/in/Invoke-Obfuscation Invoke-Obfuscation是一款专业的PowerShell脚本混淆框架…...

告别手慢无!自动化抢票系统让你轻松搞定热门演出门票

告别手慢无!自动化抢票系统让你轻松搞定热门演出门票 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到心仪的演唱会门票而烦…...

通过curl命令调试Taotoken大模型API,快速排查接入问题

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令调试Taotoken大模型API,快速排查接入问题 在接入大模型服务时,直接使用HTTP请求进行调试是一种…...

RMAN 增量备份(Incremental Backup)

1、概念RMAN 增量备份是指 RMAN 只备份自上次备份以来发生过更改的数据块,而不是备份整个数据库的所有数据块。它是 Oracle 为解决大型数据库全量备份时间长、占用空间大的问题而设计的核心特性,也是现代企业级备份策略的基础。简单类比:全库…...

手术室AI Agent实时辅助系统上线即停摆?(破解OR环境毫秒级低延迟通信、无菌区边缘算力部署、术中突发指令中断恢复三大禁区)

更多请点击: https://codechina.net 第一章:手术室AI Agent实时辅助系统上线即停摆?(破解OR环境毫秒级低延迟通信、无菌区边缘算力部署、术中突发指令中断恢复三大禁区) 手术室AI Agent系统在首次临床部署时遭遇全线停…...

【限时解密】Claude 3.5 Sonnet专属编程模式:仅开放给前500家企业的上下文感知补全协议

更多请点击: https://kaifayun.com 第一章:Claude 3.5 Sonnet编程辅助的核心能力边界与适用场景 Claude 3.5 Sonnet 在编程辅助领域展现出显著的推理深度与上下文理解能力,但其本质仍是基于大规模语言模型的生成式系统,不具备实时…...

为什么92%的Lindy自动化项目在第90天遭遇断崖式停滞?资深架构师紧急披露3个临界预警信号

更多请点击: https://intelliparadigm.com 第一章:为什么92%的Lindy自动化项目在第90天遭遇断崖式停滞?资深架构师紧急披露3个临界预警信号 当Lindy自动化项目运行至第90天左右,系统吞吐量骤降40%、任务积压率突破68%、人工干预频…...

水纹真实度提升300%的关键技巧,深度拆解--style raw、--chaos 45与自定义tile texture协同机制

更多请点击: https://kaifayun.com 第一章:水纹真实度提升300%的关键技巧,深度拆解--style raw、--chaos 45与自定义tile texture协同机制 水纹渲染的真实感跃升并非依赖单一参数调优,而是三重机制在纹理生成管线中的精准耦合&am…...

问题不是要不要审,而是审查放在哪条路径

很多团队把输出审核接进大模型服务后,第一反应是“更安全了”,真正上线才发现另一个代价更吓人:用户看到的流式回复开始一卡一顿,P95 首包时间和整段输出时间一起抖。⚠️ 这类问题往往不是审核模型慢,而是审核位置放错…...

AI医疗Agent如何72小时通过NMPA二类证审批:附2024最新审评问答清单与材料模板

更多请点击: https://intelliparadigm.com 第一章:AI医疗Agent的监管合规本质与NMPA二类证核心逻辑 AI医疗Agent并非通用大模型的简单应用延伸,而是以临床决策支持、病灶识别、报告生成等具体医疗器械功能为边界的技术实体。其监管合规本质在…...

Lindy流程自动化实施倒计时手册:仅剩最后23家企业获赠官方认证治理框架V2.3(含审计就绪检查表)

更多请点击: https://intelliparadigm.com 第一章:Lindy流程自动化实施倒计时手册发布背景与战略意义 在企业数字化转型加速演进的当下,重复性高、规则明确但跨系统耦合度强的业务流程正成为组织效能提升的关键瓶颈。Lindy流程自动化&#x…...

镜像视界浙江科技有限公司|数字孪生・视频孪生・无感定位・跨镜追踪 技术地位与核心优势

镜像视界浙江科技有限公司|数字孪生・视频孪生・无感定位・跨镜追踪 技术地位与核心优势镜像视界浙江科技有限公司,深耕数字孪生与视频孪生底层空间计算赛道,是无感定位技术体系的构建者、定义者,是跨镜全域连续追踪技术范式的开创…...

附录 B:术语表

本术语表面向“从 MM 到 HMM”专栏阅读过程中的快速查阅。它不是内核 API 手册,而是把文章中反复出现的概念放到同一张地图上:先给出直观含义,再说明它在 Linux MM/HMM 语境里的作用。建议阅读方式: 初读专栏时,把它当…...

Lindy企业流程自动化实施全周期拆解:从0到1上线仅需14天的关键5步法

更多请点击: https://intelliparadigm.com 第一章:Lindy企业流程自动化实施全周期拆解:从0到1上线仅需14天的关键5步法 Lindy 作为轻量级、高可扩展的流程自动化平台,其核心优势在于将复杂的企业级RPA与低代码逻辑深度融合&#…...

10_函数递归_从阶乘到递归调用栈

函数递归:从阶乘到递归调用栈 一、本篇文章要解决什么问题 上一篇学了函数——函数可以调用别的函数。那函数能不能调用自己?能,这就是递归。 递归是 C 语言中非常有特色的一种编程技巧,很多数据结构(树、图&#xff0…...

进程与线程:并发编程基础

摘要:进程与线程是操作系统面试的必考点,也是理解 AI 分布式训练和多线程数据加载的基础。本文从进程内存模型出发,系统讲解线程同步机制(锁、信号量、条件变量),并通过 Python 代码展示多线程爬虫和生产者…...

大数据+大模型=乘法效应?6个场景告诉你,大模型如何让你的数据平台“活”起来!

本文探讨了大数据与大模型的关系,提出大模型是大数据平台的“发动机”。文章重点介绍了六个必须使用大模型才能解放双手的场景,包括数据血缘解析、Text2SQL、数据质量智能巡检、调度任务智能运维、元数据管理和报告自动生成。这些场景展示了大模型如何通…...

计算机网络基础:TCP/IP 与 HTTP 核心知识

摘要:计算机网络是后台开发和 AI 基础设施面试的重要考点。本文从 OSI 七层模型出发,重点讲解 TCP 三次握手/四次挥手、HTTP/HTTPS 协议、以及 WebSocket 和 RESTful API 设计,并结合 Python 代码展示 Socket 编程和简单的 HTTP 服务器实现。…...

缓存设计:从 LRU 到 Redis 实战

摘要:缓存是提升系统性能的第一道防线,也是面试中系统设计环节的核心话题。本文系统讲解缓存的四大置换策略、LRU 和 LFU 的实现原理,并结合 Python 代码展示完整的缓存系统。AI 开发者还将学到 KV Cache 在 LLM 推理中的关键作用。一、为什么…...

14000华夏之光永存:开源:华为五大全栈硬核技术揭榜课题完整梳理(预刊抽取篇)

开源:华为五大全栈硬核技术揭榜课题完整梳理(预刊抽取篇) 摘要 本文完整收录黄大年茶思屋珠峰会战第八期5项前沿技术揭榜难题,原样保留技术背景、技术挑战、现有方案、现存缺陷与量化技术诉求,不做内容删减与篡改。本文…...

深度强化学习与控制2026 课程总结Week2

深度Q网络——DQN算法流程: (1) 初始化网络参数 (2) 初始化网络参数 (3) 初始化经验回放池R (4) 进入循环迭代训练:for 序列 do获取初始状态for 时间步 do 根据以贪婪策略选择动作,获得,存入经验回放池R若R中数据充足,从R中采样…...

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan怎么安装看这

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan怎么安装看这。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

2026年阿里云OpenClaw/Hermes Agent配置Token Plan怎么安装看这

2026年阿里云OpenClaw/Hermes Agent配置Token Plan怎么安装看这。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...