二十三种设计模式(二十三)--责任链模式

责任链模式(Chain of Responsibility)

责任链模式处理同样的任务但是分多个等级去做不同的应对的问题
只要出现多个对象处理的是同一个请求, 并且这多个对象是有顺序有条件的去应对请求的, 就要使用责任链模式.

假设我们有一支军队, 我军按照不同的规模编排队伍中人数的大小, 分别是军, 师, 旅, 团四种规模
四种规模的军队分别抵抗和我军人数相当的敌军规模

为了满足这个需求, 代码实现如下:

abstractclassMilUnit{intenemyForces;MilUnitnextUnit;// 用来指向责任链的下一环abstractvoidattack(intenemyForces);// 责任链的下一环由业务逻辑决定voidsetNext(MilUnitunit){this.nextUnit=unit;}}classJunUnitextendsMilUnit{@Overridepublicvoidattack(intenemyForces){System.out.println("[进攻] 211集团军战士冲上前线, 军长彭大帅");}}classShiUnitextendsMilUnit{@Overridepublicvoidattack(intenemyForces){if(enemyForces>=10000&&enemyForces<=20000){System.out.println("[进攻] 34师战士冲上前线, 师长李云龙");}else{System.out.println("[撤退] 请求军长支援");nextUnit.attack(enemyForces);}}}classLvUnitextendsMilUnit{@Overridepublicvoidattack(intenemyForces){if(enemyForces>=3000&&enemyForces<10000){System.out.println("[进攻] 17旅战士冲上前线, 旅长黄小琥");}else{System.out.println("[撤退] 请求师长支援");nextUnit.attack(enemyForces);}}}classTuanUnitextendsMilUnit{@Overridepublicvoidattack(intenemyForces){if(enemyForces<3000){System.out.println("[进攻] 3团战士冲上前线, 团长王小二");}else{System.out.println("[撤退] 请求旅长支援");nextUnit.attack(enemyForces);}}}

如上代码就是一个简单的责任链模式实现, 输入量为敌军人数,
我军通过敌军人数去判断不同的作战单位去迎战
现实中有很多类似的需求, 比如办公请假审批制度, 请假人数在个位数时, 人事直接处理, 在10-20人时, 小组长负责审批, 请假人数在20-50人时, 项目经理负责审批, 大于50人时, 老板负责审批

总结特点就是, 每个人所做的操作都是一样的, 就是审批, 上述代码中的案例, 相同的动作则是进攻
然后责任链模式中, 在进攻方法中, 要判断当前敌人的数量, 超出本单位所能承受的范围时, 就将任务交给下一级别的单位去执行

调用逻辑如下:

publicclassResponsibility{publicstaticvoidmain(String[]args){MilUnitjun=newJunUnit();MilUnitshi=newShiUnit();MilUnitlv=newLvUnit();MilUnittuan=newTuanUnit();// 这里设置责任链的起点为团, 终点为军, 逐级迎战tuan.setNext(lv);lv.setNext(shi);shi.setNext(jun);System.out.println("===== 第一波敌军规模200人");tuan.attack(200);System.out.println("===== 第二波敌军规模4000人");tuan.attack(4000);System.out.println("===== 第三波敌军规模15000人");tuan.attack(15000);System.out.println("===== 第五波敌军规模50000人");tuan.attack(50000);}}

输出:

===== 第一波敌军规模200人 [进攻] 3团战士冲上前线, 团长王小二 ===== 第二波敌军规模4000人 [撤退] 请求旅长支援 [进攻] 17旅战士冲上前线, 旅长黄小琥 ===== 第三波敌军规模15000人 [撤退] 请求旅长支援 [撤退] 请求师长支援 [进攻] 34师战士冲上前线, 师长李云龙 ===== 第五波敌军规模50000人 [撤退] 请求旅长支援 [撤退] 请求师长支援 [撤退] 请求军长支援 [进攻] 211集团军战士冲上前线, 军长彭大帅

调用时先实例化执行动作的各个单元, 它们之间默认没有相互联系
然后通过setNext方法将它们的先后顺序串联起来
实际处理业务时, 都是从通过责任链的开头去应对所有数量的敌人

这里有个缺陷就是责任链的每一环都是暴露在外的, 如果调用者没有直接从责任链开头TuanUnit开始调用, 而是直接调用JunUnit去处理所有问题, 那么这个责任链模式将失效, 所以实际业务中, 要将这部分封装起来, 只暴露责任链开头.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1132062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringBoot+SSM云与糖蛋糕购物平台系统(源码+LW+调试文档+讲解等)/云与糖蛋糕平台/云与糖蛋糕系统/云与糖购物平台/云与糖购物系统/蛋糕购物平台系统/云与糖蛋糕商城

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

从底层逻辑到工程实践,深入理解C语言在计算机世界中的核心地位与持久价值

在计算机语言百花齐放的今天&#xff0c;C语言依然占据着一个极其特殊且稳固的位置。它不像某些新兴语言那样语法华丽、生态庞大&#xff0c;也不以“快速开发”“低门槛”为主要卖点&#xff0c;但它却深深嵌入了现代计算机体系的骨骼之中。从操作系统、嵌入式设备到高性能计算…

C语言的性能优化实践全解析:从编译器自动优化机制到程序员手动调优思维与工程经验总结

在众多编程语言中&#xff0c;C语言一直以“高性能、强控制力”著称。但性能并不是自动获得的&#xff0c;它来自于对算法、内存、编译器以及硬件行为的综合理解。真正高效的C程序&#xff0c;往往不是“语法技巧”的堆砌&#xff0c;而是从设计层到实现层都围绕性能目标进行权…

大数据时代时序数据库选型指南:为何Apache IoTDB成为物联网场景首

引言&#xff1a;时序数据洪流下的选型挑战 随着物联网、工业互联网和金融科技的蓬勃发展&#xff0c;时序数据已成为企业数据资产中增长最快、价值密度最高的组成部分。据权威机构预测&#xff0c;到2027年&#xff0c;全球时序数据生成量将达到传统业务数据的10倍以上。在这…

win10下安装mysql最简方案

地址&#xff1a;https://www.mysql.com/downloads/ 自己电脑时64位的就下载64位&#xff0c;如果自己电脑时32位的就下载32。 我的电脑系统是64位的&#xff0c;所以选择下载&#xff1a;Windows(x86,64-bit)ZIP Archive版本。 跳过登陆 其他没截图的一直next就行 环境变…

月薪35-50k*16薪,中国又一行业新兴岗位在崛起!这将是程序员未来5年最好的就业方向!

随着DeepSeek等大模型技术的持续爆发&#xff0c;生成式AI和大模型技术呈现爆发式增长&#xff0c;法工程师岗位再度迎来“黄金爆发期”。2026届校招数据显示&#xff0c;大模型算法工程师月薪中位数已逼近3万元&#xff0c;顶尖人才的年薪破百万&#xff0c;远超前后端、运维、…

二十一、pinctrl子系统

前言 前面我们写的GPIO驱动程序都是自己在驱动里面定义好gpio引脚需要用到的寄存器&#xff0c;然后在驱动程序里面直接去配置这些寄存器。Linux是一个成熟的&#xff0c;跨平台的通用操作系统&#xff0c;对于配置引脚这样的最基本的功能&#xff0c;是已经有一套现成的框架可…

【人工智能学习-AI-MIT公开课第 17.-学习:boosting 算法】

人工智能学习-AI-MIT公开课第 17.-学习&#xff1a;boosting 算法1-前言2-课程链接3-具体内容解释说明一、Boosting 在讲什么&#xff08;一句话&#xff09;二、为什么要讲 Boosting&#xff1f;&#xff08;动机&#xff09;三、Boosting 的基本流程&#xff08;入试超爱&…

基于Java+SpringBoot+SSM博客系统(源码+LW+调试文档+讲解等)/博客平台/博客软件/个人博客系统/博客网站系统/博客管理系统

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

Java Web 社区医院信息平台系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着信息技术的快速发展&#xff0c;传统社区医院的管理模式已难以满足现代医疗服务的需求。社区医院在日常运营中涉及患者信息管理、医生排班、药品库存、预约挂号等多方面业务&#xff0c;传统的手工记录或单机系统存在效率低下、数据易丢失、信息共享困难等问题。为了提…

【日语学习-日语知识点小记-日本語体系構造-JLPT-N2前期阶段-第一阶段(1):再次起航】

日语学习-日语知识点小记-日本語体系構造-JLPT-N&#xff12;前期阶段-第一阶段&#xff08;1&#xff09;&#xff1a;再次起航1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰2、知识点&#xff11;、とされている&#xff12;、にかけては&…

SpringBoot+Vue 师生健康信息管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL

摘要 随着信息技术的快速发展&#xff0c;健康信息管理系统的需求日益增长&#xff0c;尤其是在教育领域&#xff0c;师生健康数据的实时监控和管理显得尤为重要。传统的健康信息管理方式依赖纸质记录或简单的电子表格&#xff0c;存在数据易丢失、查询效率低、统计困难等问题。…

实验一 安全威胁与攻击实验

一、实验目的安全威胁与攻击实验与理论教学第一章信息安全概论相对应。本实验在学生完成MAC地址欺骗攻击与防御实验、OSPF路由项欺骗攻击和防御实验的基础上&#xff0c;使学生能够理解威胁、攻击、资产的关系&#xff0c;并理解基本安全设计原则的重要性。具体如下&#xff1a…

智慧停车解决方案

扫描下载文档详情页: https://www.didaidea.com/wenku/16319.html

【JavaSE】多线程之安全使用容器

不出意外这是多线程的最后一篇文章&#xff0c;主要介绍的是面试中比较常考的一个点——多线程下使用容器&#xff0c;我们开始吧~我们知道&#xff0c;在单线程环境下ArrayList、HashMap等容器使用起来非常方便&#xff0c;但在多线程环境中&#xff0c;如果多个线程同时对容器…

Thinkphp的基于微服务教材征订系统(编号:

目录基于ThinkPHP的微服务教材征订系统核心功能与服务拆分技术实现与优化应用价值与扩展性项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理基于ThinkPHP的微服务教材征订系统 该系统采用ThinkPHP框架结合微服务架构设计&#xff0c;旨在实现教材征…

基于SpringBoot+Vue的IT交流和分享平台管理系统设计与实现【Java+MySQL+MyBatis完整源码】

摘要 随着互联网技术的快速发展&#xff0c;IT技术交流与知识分享的需求日益增长。传统的技术论坛和社交媒体平台虽然提供了基础的交流功能&#xff0c;但在专业性、系统性和用户体验方面仍有较大提升空间。尤其是在技术问答、资源共享和项目管理等方面&#xff0c;缺乏高效的整…

【JavaSE】文件基础与File类

在日常开发中&#xff0c;我们几乎每天都在和“文件”打交道&#xff1a;读取配置文件、写日志、上传下载文件…… 但很多时候&#xff0c;我们对“文件”的理解其实是比较模糊的&#xff0c;这篇文章我们将从文件的基本概念出发&#xff0c;重新了解一下文件~1. 文件基础 1.1 …

SpringBoot+Vue “衣依”服装销售平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着互联网技术的快速发展&#xff0c;电子商务平台已成为现代商业的重要组成部分。服装行业作为传统零售业的代表&#xff0c;亟需通过数字化转型提升竞争力。“衣依”服装销售平台基于SpringBoot和Vue技术栈开发&#xff0c;旨在为用户提供便捷的在线购物体验。该平台整…

Thinkphp的农贸市场摊位 夜市摊位租赁系统设计与实现

目录摘要关键词项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 农贸市场与夜市摊位租赁系统基于ThinkPHP框架开发&#xff0c;旨在解决传统摊位管理中效率低、信息不透明等问题。系统采用B/S架构&#xff0c;结合MySQL数据库&#xff0c;实现…