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

设计模式-责任链模式

一、所涉及的类

一个抽象接口:里面定义一个 该接口的属性next节点,外加set get 方法,以及请求处理方法
N个抽象接口实现类:实现请求处理方法,如果自己能处理则处理,如果处理不了则调用getnext方法调用返回值的请求处理方法
注意:在调用类中创建各个节点,并通过setNext的方式来定义各个节点的顺序,类似于审批流

二、实现代码

抽象接口

public abstract class Approval {private Approval next;public void setNext(Approval next){this.next = next;}public Approval getNext(){return next;}protected abstract void handle(String request);
}

抽象接口实现类1

public class AskApprovalFromBoss extends Approval{@Overrideprotected void handle(String request) {if (request.equals("Ask")){System.out.println("请假老板审批通过");if (getNext() != null ){getNext().handle(request);}else{System.out.println("审批结束");}}else{getNext().handle(request);}}
}

抽象接口实现类2

public class AskApprovalFromLeader extends Approval{@Overrideprotected void handle(String request) {if (request.equals("Ask")){System.out.println("请假组长审批通过");if (getNext() != null ){getNext().handle(request);}else{System.out.println("审批结束");}}else{getNext().handle(request);}}
}

抽象接口实现类3

public class ResignApprovalFromBoss extends Approval{@Overrideprotected void handle(String request) {if (request.equals("Resign")){System.out.println("离职老板审批通过");if (getNext() != null ){getNext().handle(request);}else{System.out.println("审批结束");}}else{getNext().handle(request);}}
}

调用类

public class ChainApplication {public static void main(String[] args) {/*** 改实现是设置了三个审批节点,发起请假的流程,只有 Leader和Boss可以审批,boss的离职审批节点不做处理*/Approval askApprovalFromLeader = new AskApprovalFromLeader();Approval askApprovalFromBoss = new AskApprovalFromBoss();Approval resignApprovalFromBoss = new ResignApprovalFromBoss();askApprovalFromLeader.setNext(resignApprovalFromBoss);resignApprovalFromBoss.setNext(askApprovalFromBoss);askApprovalFromLeader.handle("Ask");}
}

在这里插入图片描述

三、总结

责任链模式是在调用类中指定链式关系,并在处理方法中判断是不是自己处理,如果不是则调用getNext方法交给下一个节点来处理

http://www.dtcms.com/a/264961.html

相关文章:

  • SpringBoot控制反转
  • vue中的toRef
  • 【Redis】StringRedisTemplate 和 RedisTemplate 的区别
  • Python 数据分析与可视化 Day 14 - 建模复盘 + 多模型评估对比(逻辑回归 vs 决策树)
  • JavaEE==网站开发
  • Liunx 安装 MySQL 8.0
  • Selenium使用教程-爬虫版(超详细)
  • 数学建模_图论
  • 重塑智能体决策路径:深入理解 ReAct 框架
  • 【前端进阶】【实战】【性能优化】前端开发中的事件监听与DOM操作优化实践
  • Linux基本命令篇 —— whereis命令
  • 利用 Claude Opus 4 自动化 GitHub 工作流:从安装到实战详解
  • 新版本AI数字人全能管家,即将推出,还是开源免费。
  • [附源码+数据库+毕业论文+答辩PPT]基于Spring+MyBatis+MySQL+Maven+vue实现的中小型企业财务管理系统,推荐!
  • 多个单片机简单通讯框架
  • GO Web 框架 Gin 完全解析与实践
  • 数据结构与算法 第三章 栈和队列
  • 第一章 快速入门
  • DPI深度检索原理和架构
  • 人脸活体识别3:C/C++实现人脸眨眼 张嘴 点头 摇头识别(可实时检测)
  • 创客匠人解构知识付费爆单密码:产品力打造与 IP 变现的深度耦合
  • Kafka高级特性深度解析:构建企业级流处理平台的核心技术
  • IP地理定位技术综述:理论、方法与应用创新(三)
  • pdf 合并 python实现(已解决)
  • Qt Quick 与 QML(五)qml中的布局
  • 基于图神经网络的ALS候选药物预测模型设计与实现
  • Point Transformer V3(PTv3)
  • AI:什么是Agent
  • mysql查看数据库
  • 自主/智能的本质内涵及其相互关系