Java责任链模式实战及日常开发应用场景
熟悉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责任链模式实战及日常开发应用场景相关推荐
- Java 责任链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...
- java责任链模式审批请假_Java使用责任链模式处理学生请假问题详解
本文实例讲述了Java使用责任链模式处理学生请假问题.分享给大家供大家参考,具体如下: 一. 模式定义 在责任链模式中,很多对象由每一个对象对其下家的引用而连接起来,形成一条链.客户端应用请求在这个链 ...
- java责任链模式审批请假_14-学生生病请假:责任链模式
14.1 请假流程 学生生病了,需要请假,写了请假条交给班长处理.假如此时有三种情况: 1)是小病需要请假时间短,班长能够处理,就批准请假,否则交给老师处理: 2)老师实际查看学生的情况,如果可以处理 ...
- 【Java 责任链模式实例】
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送,直到有一个处理者处理它为止.在责任链模式中,每个处理者都是相互独立的对象,并且每个处理者都负责对请求进行处理.如果当前处理者不能处理请 ...
- 王者荣耀java,责任链模式在王者荣耀中的应用
来源:https://blog.csdn.net/IT_charge 一.简述 在王者荣耀商城中,玩家可以参与夺宝抽奖.夺宝抽奖分两种,一种是积分抽奖,另一种是钻石抽奖:在平常,两种夺宝抽奖方式均可以 ...
- java责任链模式审批请假_Java设计模式-责任链模式
Java设计模式-责任链模式 Java版本:jdk1.8 IDE:IDEA 一 前言 本文介绍责任链模式以及Java下的实现. 二 概念 1.什么是责任链模式 责任链模式(Chain of Respo ...
- java责任链模式_java中责任链模式详解和使用方法
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...
- java责任链模式做优惠_Java设计模式菜鸟系列(十八)责任链模式建模与实现
责任链模式(ChainOfResponsibility): 有多个对象,每个对象持有下一个对象的引用,形成一条链,请求在这条链上传递,直到某一对象决定处理该请求,但是发出者并不清楚最终哪个对象会处理该 ...
- java 责任链模式 链表_责任链模式的实现及源码中应用
01 - 责任链模式的实现 假设一个出差任务的流程需要审批出差行程和出差报销金额.那么,对应两个部门的审核.我们先定义一个出差任务Task类: 然后,我们定义一个抽象的处理类Handler,其中具体的 ...
最新文章
- Jersey 入门与Javabean
- 数论基础_欧几里德算法
- 电脑键盘上每个键的作用_键盘F键有什么作用 键盘F键作用介绍【详解】
- 移动硬盘丢失数据的原因 移动硬盘数据怎么恢复回来
- gcc: error trying to exec ‘cc1plus‘: execvp: Permission denied
- 大白话图文结合的方式讲解什么是CAP
- python画猫和老鼠代码_Python实现猫捉老鼠小游戏!虽然简陋但是童真永在!
- Encountered a duplicated sql alias [id] during auto-discovery of a native-sq
- 学习springboot第一天
- 不要用PS啦,python+opencv代码给证件照换底色
- 文墨绘学书法教育领导品牌
- Fuchsia OS 将推送给所有第一代 Nest Hub 设备
- 阿里云国际版ACE与国内版ACE区别
- springBoot 项目自定义命名application.properties配置文件名称
- 电磁场与电磁波(5)——静电场基本方程、分界面上的衔接条件
- DELL T410服务器 重装
- 2020多媒体信号处理复习笔记
- 计算机应用程序没声音,详细教您win7没有声音怎么办
- 固态硬盘和机械硬盘的区别与硬盘的性能指标
- 如果你有一台超级计算机,你会用它来做什么?