熟悉spring mvc的同学都知道,它在处理请求的时候每个请求都会经过拦截器进行处理,拦截器接口内部定义了处理请求前和请求后的方法,只要实现了该拦截器接口就可以对请求进行相应的处理,这使用的正是责任链模式。我在新入职一家公司后,敏捷开发进行版本迭代,在接到新需求,并确定需求后,基于前同事的代码进行二次开发,发现在一个类中堆了一坨代码,大概一千多行,而在该类中有一个核心方法,它会调用整个类中其他所有的方法。伪代码如下

    public void handle() {//调用外部接口获取数据写入param对象writexxx(param);writexxx(param);writexxx(param);...writexxx(param);writexxx(param);writexxx(param);//将param对象入库xxxMapper(param)}

而这种代码调用方式我认为很适合使用责任链模式,所以看到这坨代码时,非常想重构,但也就是想想,毕竟改别人的代码,代价是很大的。这次版本迭代就是新增外部接口的调用,写入param对象并持久化,所以我准备换种方式实现,让业务可以横向拓展,而不是继续在这个类中进行疯狂输出。

类似拦截器,新增接口定义,

public interface TestHandler {void handler(Param param);
}

具体实现类在handler方法中调用外部接口,对param对象进行操作。@Order注解可以对xxxHandler.handler()执行顺序进行控制,

@Component
@Order(2)
public class AHandler implements TestHandler{@Overridepublic void handler(Param param) {User user = param.getUser();user.setName("james");}
}
@Component
@Order(1)
public class BHandler implements TestHandler{@Overridepublic void handler(Param param) {User user = param.getUser();user.setEmail("243243");}
}

改造handl()方法,在该类定义TestHandler集合属性并注入具体实现,通过for循环调用handler方法

@Resource
List<TestHandler> handlers;public void handle() {//调用外部接口获取数据写入param对象writexxx(param);writexxx(param);writexxx(param);...writexxx(param);for (TestHandler handler : handlers) {handler.handler(param);}//将param对象入库xxxMapper(param)}       

这样就实现了对业务进行横向拓展,而不会是代码在一个类中越卷越多,最后烂到底。

Java责任链模式实战及日常开发应用场景相关推荐

  1. Java 责任链模式

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...

  2. java责任链模式审批请假_Java使用责任链模式处理学生请假问题详解

    本文实例讲述了Java使用责任链模式处理学生请假问题.分享给大家供大家参考,具体如下: 一. 模式定义 在责任链模式中,很多对象由每一个对象对其下家的引用而连接起来,形成一条链.客户端应用请求在这个链 ...

  3. java责任链模式审批请假_14-学生生病请假:责任链模式

    14.1 请假流程 学生生病了,需要请假,写了请假条交给班长处理.假如此时有三种情况: 1)是小病需要请假时间短,班长能够处理,就批准请假,否则交给老师处理: 2)老师实际查看学生的情况,如果可以处理 ...

  4. 【Java 责任链模式实例】

    责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送,直到有一个处理者处理它为止.在责任链模式中,每个处理者都是相互独立的对象,并且每个处理者都负责对请求进行处理.如果当前处理者不能处理请 ...

  5. 王者荣耀java,责任链模式在王者荣耀中的应用

    来源:https://blog.csdn.net/IT_charge 一.简述 在王者荣耀商城中,玩家可以参与夺宝抽奖.夺宝抽奖分两种,一种是积分抽奖,另一种是钻石抽奖:在平常,两种夺宝抽奖方式均可以 ...

  6. java责任链模式审批请假_Java设计模式-责任链模式

    Java设计模式-责任链模式 Java版本:jdk1.8 IDE:IDEA 一 前言 本文介绍责任链模式以及Java下的实现. 二 概念 1.什么是责任链模式 责任链模式(Chain of Respo ...

  7. java责任链模式_java中责任链模式详解和使用方法

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...

  8. java责任链模式做优惠_Java设计模式菜鸟系列(十八)责任链模式建模与实现

    责任链模式(ChainOfResponsibility): 有多个对象,每个对象持有下一个对象的引用,形成一条链,请求在这条链上传递,直到某一对象决定处理该请求,但是发出者并不清楚最终哪个对象会处理该 ...

  9. java 责任链模式 链表_责任链模式的实现及源码中应用

    01 - 责任链模式的实现 假设一个出差任务的流程需要审批出差行程和出差报销金额.那么,对应两个部门的审核.我们先定义一个出差任务Task类: 然后,我们定义一个抽象的处理类Handler,其中具体的 ...

最新文章

  1. Codeforces 494D Upgrading Array
  2. CentOS下yum安装nginx服务
  3. 分布式架构springmvc+springboot+springcloud+redis
  4. Spring Boot 使用 Graylog 收集日志
  5. 自学python有用吗-普通人学Python有用吗?学完能做什么?
  6. Python 技术篇-用smtplib和email库实现邮件发送并展示本地图片实例演示
  7. 3D深度估计,让视频特效更梦幻!
  8. springboot中使用@Value读取配置文件
  9. java excel 晒新年操作_java操作Excel的poi 创建一个sheet页
  10. php composer 框架,用 Composer 组建了个 PHP 框架
  11. 达摩院最新突破:新型量子芯片操控精度99.72%创新高
  12. 树莓派 armv几_如何在具有armv6处理器的树莓派板上安装和使用Java 11和JavaFX 11
  13. Jensen不等式及其扩展
  14. 如何用文件对比工具进行文件内容比较
  15. 请为自己计算机进行磁盘优化,如何对Win10系统的磁盘进行清理并优化
  16. 【数学分析入门】R语言独立性检验方法
  17. java抢红包_Java实现抢红包功能
  18. [清风数学建模]层次分析法(AHP)笔记及代码实现
  19. 向老销售取经,学来的一点软件销售技巧
  20. MobileNet V1官方预训练模型的使用

热门文章

  1. 安装虚拟机提示“无法安装服务VMAuthdService”,请确保您有足够的权限安装系统服务
  2. [CodeX] 输入文本即可生成代码
  3. Springboot使用-静态类读取配置文件
  4. 隐私无忧,多御浏览器者通过这些功能保护用户隐私
  5. 由神经网络机器学习的算法谈谈人的成瘾以及疲惫机制
  6. JS中的BOM 详解
  7. python的lxml库简介_Python lxml库简介
  8. python通过urllib+request抓取新闻联播
  9. 云技术在android平台上的应用程序,安卓系统上的ERP云应用
  10. ULCL功能--5GC