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

设计模式——责任链模式13

责任链模式 每个流程或事物处理 像一个链表结构处理。场景由 多层部门审批,问题分级处理等。下面体现的是 不同难度的问题由不同人进行解决。
设计模式,一定要敲代码理解
在这里插入图片描述

传递问题实体

/*** @author ggbond* @date 2024年04月10日 07:48*/
public class Question {private  int level;private  String detail;public Question(int level, String detail) {this.level = level;this.detail = "这是难度系数为"+String.valueOf(level)+":"+detail;}public int getLevel() {return level;}public String getDetail() {return detail;}
}

责任链处理抽象

/*** @author ggbond* @date 2024年04月10日 07:53*/
public abstract class Handler {final static int LEVEL1 = 1; // 题目难度为1final static int LEVEL2 = 2; // 题目难度为2final static int LEVEL3 = 3; // 题目难度为3// 能处理的级别private int level = 0;// 责任传递,下一个责任人是谁private Handler nextHandler;protected   String name;public Handler(int level) {this.level = level;}public void setNextHandler(Handler nextHandler) {this.nextHandler = nextHandler;}protected abstract void response(Question question);final void handle(Question question) {// 难度小递增处理if (question.getLevel() <= this.level) {this.response(question);} else {if (this.nextHandler != null) { // 有后续环节,请求传递this.nextHandler.handle(question); // 责任传递} else { // 无后续环节了,无法处理System.out.print("题目难度为" + question.getLevel() +" ");System.out.println(",这题目太难,没有人能可以处理。");}}}
}

责任链处理实体

public class Child extends  Handler{public Child(String name) {super(Handler.LEVEL1);this.name=name;}@Overrideprotected void response(Question question) {System.out.print("我是"+name+" ");System.out.println("问题难度为1:"+question.getDetail()+"已经被解决");}
}
public class Undergraduate extends  Handler{public Undergraduate(String name) {super(Handler.LEVEL2);this.name=name;}@Overrideprotected void response(Question question) {System.out.print("我是"+name+" ");System.out.println("问题难度为2:"+question.getDetail()+"已经被解决");}
}
public class Graduates extends  Handler{public Graduates(String name) {super(Handler.LEVEL3);this.name=name;}@Overrideprotected void response(Question question) {System.out.print("我是"+name+" ");System.out.println("问题难度为3:"+question.getDetail()+"已经被解决");}
}

测试与结果

/*** @author ggbond* @date 2024年04月10日 08:13*/
public class Main {public static void main(String[] args) {Question q1=new Question(1,"1+1=");Question q2=new Question(2,"数据结构与算法");Question q3=new Question(3,"高等算法");Question q4=new Question(4,"LLM");ArrayList<Question> list=new ArrayList<>();list.add(q1);list.add(q2);list.add(q3); list.add(q4);Handler h1= new Child("儿童");Handler h2= new Undergraduate("大学生");Handler h3= new Graduates("研究生");h1.setNextHandler(h2);h2.setNextHandler(h3);for ( Question item: list) {h1.handle(item);}}
}
我是儿童 问题难度为1:这是难度系数为1:1+1=已经被解决
我是大学生 问题难度为2:这是难度系数为2:数据结构与算法已经被解决
我是研究生 问题难度为3:这是难度系数为3:高等算法已经被解决
题目难度为4 ,这题目太难,没有人能可以处理。

总结

调用外部无需关心责任链是如何处理的,如果要加处理对象也非常便携,体现单一职责与开闭原则。

代码下载

代码下载

http://www.lryc.cn/news/336363.html

相关文章:

  • Linux云计算之Linux基础3——Linux系统基础part-2
  • HBase详解(2)
  • Web后端搭建
  • k8s单节点部署,容器运行时使用containerd
  • 深入浅出 -- 系统架构之性能优化的核心思维
  • Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
  • 批量删除文件脚本
  • 蓝桥杯物联网竞赛_STM32L071KBU6_我的全部省赛及历年模拟赛源码
  • 微服务和K8S
  • Ant Design 表单基础用法综合示例
  • MWeb Pro For Mac v4.5.9 强大的 Markdown 软件中文版
  • Git常用命令详解:掌握版本控制的核心操作
  • Vue链接跳转地址 href 中有参数带有#
  • python 会员信息管理系统2.0
  • HTTP的强制缓存和协商缓存
  • Prometheus-Grafana基础篇安装绘图
  • 探索艺术的新领域——3D线上艺术馆如何改变艺术作品的传播方式
  • [dvwa] file upload
  • pygame发射子弹后绘制射线
  • 逻辑回归都有什么类型
  • 基于springboot+vue实现的高校宿舍管理系统(界面优美,十分推荐)
  • C语言学习笔记day18
  • JSP内置对象session
  • BM96 主持人调度(二)(贪心算法)
  • 【TB作品】MSP430单片机读取大气压强传感器BMP180
  • Github第一Star数的国产免费开源防火墙--雷池社区版初步体验
  • 自动驾驶涉及相关的技术
  • 简单高效的GO发票识别+发票查验接口
  • c++和python基本数据类型比较
  • 运维工具如此割裂,九招帮你统一纳管