熟悉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. Jersey 入门与Javabean
  2. 数论基础_欧几里德算法
  3. 电脑键盘上每个键的作用_键盘F键有什么作用 键盘F键作用介绍【详解】
  4. 移动硬盘丢失数据的原因 移动硬盘数据怎么恢复回来
  5. gcc: error trying to exec ‘cc1plus‘: execvp: Permission denied
  6. 大白话图文结合的方式讲解什么是CAP
  7. python画猫和老鼠代码_Python实现猫捉老鼠小游戏!虽然简陋但是童真永在!
  8. Encountered a duplicated sql alias [id] during auto-discovery of a native-sq
  9. 学习springboot第一天
  10. 不要用PS啦,python+opencv代码给证件照换底色
  11. 文墨绘学书法教育领导品牌
  12. Fuchsia OS 将推送给所有第一代 Nest Hub 设备
  13. 阿里云国际版ACE与国内版ACE区别
  14. springBoot 项目自定义命名application.properties配置文件名称
  15. 电磁场与电磁波(5)——静电场基本方程、分界面上的衔接条件
  16. DELL T410服务器 重装
  17. 2020多媒体信号处理复习笔记
  18. 计算机应用程序没声音,详细教您win7没有声音怎么办
  19. 固态硬盘和机械硬盘的区别与硬盘的性能指标
  20. 如果你有一台超级计算机,你会用它来做什么?

热门文章

  1. ​起名项目玩法,玩好了一天收入500+
  2. 义乌个体户结汇账户问题?
  3. 服务器磁盘阵列亮红灯报警故障处理
  4. VUE 生成二维码弹框第一次不显示问题DMO延迟方案
  5. java驾校综合信息系统
  6. 最小描述长度MDL(Minimum Description Length)及信息论介绍
  7. 修改SQL-保留两位小数
  8. Flink 在中泰证券的实践与应用
  9. 小马哥----- 高仿小米4刷机 主板型号m8209拆机主板图与开机识别图
  10. 电子签章pdf文件之我见