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

项目中用到的责任链模式

目录

1.什么是责任链?它的原理是什么?

2.应用场景

​3.项目中的应用

传送门:策略模式,工作中你用上了吗?


1.什么是责任链?它的原理是什么?

将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。

                                                                                               以上定义来自《设计模式之美》

2.应用场景

责任链模式的应用场景,在实际工作中,通常有如下两种应用场景。 

  • 操作需要经过一系列的校验,通过校验后才执行某些操作。

 

  • 工作流。企业中通常会制定很多工作流程,一级一级的去处理任务。 

3.项目中的应用

责任链要执行的业务:

public interface AcptRegisterService {/*** ************** @param acptRegisterBO*/void check(AcptRegisterBO acptBusinRegisterBO);}

责任链第一次执行的实现:


@Slf4j
@Order(1)
@Service
@RequiredArgsConstructor
public class AcptFormExistsCheckImpl implements AcptRegisterService{private final AcptformCtrl acptformCtrl;@Overridepublic void check(AcptRegisterBO checkBO) {//写自己的业务逻辑Boolean counter = BpsCommonUtils.isCounterSystem(checkBO.getOpEntrustWay());if (counter) {return;} else if (StringUtils.isBlank(checkBO.getAcptEnrouteField())){// 如果【受理在途校验字段】为空,则校验结束return;}
}

责任链第二次执行的实现:  

@Slf4j
@Order(2)
@Service
@RequiredArgsConstructor
public class Eservice724ConfigCheckImpl implements AcptRegisterService{private final AcptTemplateComCtrl acptTemplateComCtrl;private final String STAGING_PROCESS_INSTANCE = "stagingance";/***** @param acptRegisterBO */@Overridepublic void check(AcptRegisterBO acptRegisterBO ) {Character config76135 = SysConfigUtils.getCharConfig(HsSysConfigConstants.SYSCONFIG_76135);if (CHARACTOR_1 != config76135) {// 76135开关关闭时,不校验return;}Acpttpl acpttpl = acptTemplateComCtrl.getAcpttpl(acptBusinRegisterCheckBO.getAcptBusinId());if (acpttpl.getAcptType() != BUSIN) {// 参数类、运营类的业务受理模板没有7*24小时受理开关,不校验return;}

 责任链第三次执行的实现:

@Slf4j
@Order(3)
@Service
public class ApprovalNodeCheckImpl implements AcptRegisterService{@Autowiredprivate AcptTemplateCtrl acptTemplateCtrl;@Autowiredprivate AcptTemplateComCtrl acptTemplateComCtrl;@Autowiredprivate DependenceConfigCtrl dependenceConfigCtrl;@CloudReferenceprivate WFProcessDefinitionService wfProcessDefinitionService;//    @Value("${approval.node.acptBusinIds}")
//    private String acptBusinIds;/***登记校验** @param acptRegisterBO */@Overridepublic void check(AcptRegisterBO acptRegisterBO ) {// 柜台接口不需要人工审核接口校验Boolean counter = BpsCommonUtils.isCounterSystem(acptBusinRegisterCheckBO.getOpEntrustWay());if (counter) {return;}String acptBusinIds = dependenceConfigCtrl.getApprovalNodeBusinIds();String acptBusinId = acptBusinRegisterCheckBO.getAcptBusinId();log.info("需要检测人工节点的业务编号:{}", acptBusinId);if (StringUtils.isNoneBlank(acptBusinIds)) {boolean present = Arrays.stream(StringUtils.split(acptBusinIds, ",")).anyMatch(e -> StringUtils.equals(e, acptBusinId));// 不存在需要校验的业务编号,无需处理if (!present) {return;}}

具体的应用:

  @Autowiredprivate List<AcptRegisterService > acptRegisterServiceList;/*** 受理信息登记** @param input 入参* @return*/public PostBpsacptformRegistOutput postBpsacptformRegist(PostBpsacptformRegistInput input) {PostBpsacptformRegistOutput output = new PostBpsacptformRegistOutput();// 1.登记检查AcptRegisterBO acptRegisterBO = new AcptRegisterBO ();DataCopyUtil.copyData(input, acptBusinRegisterCheckBO);//******************* 1.在途校验 2.业务受理时间校验 3.人工审核节点校验 ************//acptRegisterServiceList.forEach(e -> e.check(acptRegisterBO ));
}

传送门:

策略模式,工作中你用上了吗?

给对象讲工厂模式,必须易懂易会

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

相关文章:

  • C++复习笔记--STL的string容器和vector容器
  • 第一章 软件项目管理概述
  • 【Linux系统编程】06:共享内存
  • 【专项】112. 路径总和
  • 【数据结构】堆排序
  • 论文阅读笔记《GAMnet: Robust Feature Matching via Graph Adversarial-Matching Network》
  • 数据安全—数据完整性校验
  • Java 最小路径和
  • Flask+VUE前后端分离的登入注册系统实现
  • 【Go】用Go在命令行输出好看的表格
  • 怎么处理消息重发的问题?
  • JVM 运行时数据区(数据区组成表述,程序计数器,java虚拟机栈,本地方法栈)
  • Oracle ASM磁盘组配置、日常运维、故障处理等操作资料汇总
  • java对象的创建与内存分配机制
  • 本地存储localStorage、sessionStorage
  • JavaSE: 网络编程
  • 计算机图形学09:二维观察之点的裁剪
  • 2023Java 并发编程面试题
  • CAD如何绘制A0/A1/A2/A3/A4图框?
  • R 安装 “umap-learn“ python 包
  • 测试同学如何快速开发测试平台?
  • 【程序员接口百宝箱】免费常用API接口
  • 使数组和能被P整除[同余定理+同余定理变形]
  • 25k的Java开发常问的Synchronized问题有哪些?
  • ES增量同步方案
  • 计算器--课后程序(Python程序开发案例教程-黑马程序员编著-第6章-课后作业)
  • YOLOv5中添加SE模块详解——原理+代码
  • arcgispro3.1(账号登陆)
  • VB6换个思路解决微信下载文件只读的问题(含源码)
  • Allegro如何知道组合操作命令的拼写