【灵动之链】打造高效处理架构的双轨组合模式实战

news2025/2/28 13:46:56

文章目录

      • 打造高效处理架构的双轨组合模式实战
        • 目标概述
        • 场景一: 注解驱动的Chain
          • 设计说明
        • 场景二:工作流调度 - List与Set注入的Chain
          • 设计说明
        • 总结

打造高效处理架构的双轨组合模式实战

在这里插入图片描述

目标概述

本教程旨在阐述两种不同的组合模式实现方式,重点在于如何构建灵活的处理链,以适应不同场景下的需求,如单据处理与工作流调度。我们将基于提供的设计思路,重新定义类名并实施脱敏处理,以保护具体业务逻辑细节。
在这里插入图片描述

场景一: 注解驱动的Chain
设计说明
  • 核心接口SingleDocumentHandler(普通处理器接口)与 SingleDocumentHandlerChain(链式处理器接口)。
  • 注解:自定义注解如@DocumentHandler用于标记处理器类及其处理的类型。
  • 实现方式:利用注解扫描与反射机制自动构建处理器链,通过类名或注解中的键值匹配来决定处理器的执行。
// 自定义注解,用于标记处理器
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface DocumentHandler {
    String key(); // 类型的唯一标识
}

// 普通处理器接口
public interface SingleDocumentHandler {
    void handle(DocumentContext context);
}

// 链式处理器基类,实现了普通处理器接口
public abstract class AbstractDocumentHandlerChain implements SingleDocumentHandler {
    private SingleDocumentHandler next; // 下一个处理器引用

    public void setNext(SingleDocumentHandler handler) {
        this.next = handler;
    }

    // ...其他辅助方法
}

// 示例处理器实现
@DocumentHandler(key = "ORDER_PROCESS")
public class OrderProcessingHandler extends AbstractDocumentHandlerChain {
    @Override
    public void handle(DocumentContext context) {
        // 处理逻辑
        if (next != null) {
            next.handle(context);
        }
    }
}
场景二:工作流调度 - List与Set注入的Chain
设计说明
  • 核心接口WorkflowTaskDispatcher(任务分发接口)与 WorkflowTaskResolver(任务解析器接口)。
  • 实现方式WorkflowDispatcherChain仅实现WorkflowTaskDispatcher,包含一个List<WorkflowTaskResolver>成员,通过构造函数或setter注入解析器集合。解析器直接实现WorkflowTaskResolver,无需实现WorkflowTaskDispatcher
// 任务分发接口
public interface WorkflowTaskDispatcher {
    void dispatch(TaskContext task);
}

// 任务解析器接口
public interface WorkflowTaskResolver {
    boolean canResolve(TaskContext task);
    void resolve(TaskContext task);
}

// 链式调度器实现
public class WorkflowDispatcherChain implements WorkflowTaskDispatcher {
    private final List<WorkflowTaskResolver> resolvers;

    public WorkflowDispatcherChain(List<WorkflowTaskResolver> resolvers) {
        this.resolvers = resolvers;
    }

    @Override
    public void dispatch(TaskContext task) {
        for (WorkflowTaskResolver resolver : resolvers) {
            if (resolver.canResolve(task)) {
                resolver.resolve(task);
                return;
            }
        }
        // 如果没有找到合适的解析器,则...处理逻辑
    }
}

// 示例解析器
public class ApprovalTaskResolver implements WorkflowTaskResolver {
    @Override
    public boolean canResolve(TaskContext task) {
        // 判断逻辑
        return task.getType().equals("APPROVAL");
    }

    @Override
    public void resolve(TaskContext task) {
        // 解析与处理逻辑
    }
}
总结

上述代码展示了两种不同场景下组合模式的实现策略。单据处理系统侧重于通过注解和反射简化配置,增强灵活性;而工作流调度系统则通过明确的职责分离和构造注入来确保任务的有序分发与处理。两者均体现了组合模式的核心思想——将请求沿着处理器链传递,直至被适当处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1819924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机毕业设计】258基于微信小程序的课堂点名系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

MathWorks的介绍,以及Simscape 的主要特点

MathWorks 是一家美国的软件公司&#xff0c;以其科学计算软件为广泛知名&#xff0c;特别是 MATLAB 和 Simulink。这两款产品广泛用于工程、科学研究、学术界和工业应用中&#xff0c;帮助用户进行数学计算、算法开发、数据可视化、数据分析&#xff0c;以及仿真和模型构建。 …

前缀和(一维前缀和+二维前缀和)

前缀和 定义&#xff1a; 前缀和是指某序列的前n项和&#xff0c;可以把它理解为数学上的数列的前n项和&#xff0c;而差分可以看成前缀和的逆运算。合理的使用前缀和与差分&#xff0c;可以将某些复杂的问题简单化。 用途&#xff1a; 前缀和一般用于统计一个区间的和&…

GoldWave 6.80最新版软件安装包下载+详细安装步骤

​GoldWave是一款易上手的专业级数字音频编辑软件&#xff0c;从最简单的录制和编辑到最复杂的音频处理&#xff0c;恢复&#xff0c;增强和转换&#xff0c;它可以完成所有工作&#xff0c;包括WAV、OGG、VOC、 IFF、AIFF、 AIFC、AU、SND、MP3、 MAT、 DWD、 SMP、 VOX、SDS、…

【Intel CVPR 2024】通过图像扩散模型生成高质量360度场景,只需要一个语言模型

在当前人工智能取得突破性进展的时代&#xff0c;从单一输入图像生成全景场景仍是一项关键挑战。大多数现有方法都使用基于扩散的迭代或同步多视角内绘。然而&#xff0c;由于缺乏全局场景布局先验&#xff0c;导致输出结果存在重复对象&#xff08;如卧室中的多张床&#xff0…

【Go】用 Go 原生以及 Gorm 读取 SQLCipher 加密数据库

本文档主要描述通过 https://github.com/mutecomm/go-sqlcipher 生成和读取 SQLCipher 加密数据库以及其中踩的一些坑 用 go 去生成读取 SQLCipher 数据库用 gorm 去读取 SQLCipher 数据库在生成后分别用 DBeaver、db browser 和 sqlcipher 读取 SQLCipher 数据库&#xff0c;…

GIS开发到底能应用在哪些行业 ?

GIS应用的领域到底有多广&#xff1f;恐怕很多GIS从业者都想不到。 尤其是近些年&#xff0c;互联网GIS的普及与发展&#xff0c;GIS技术的应用领域越来越多&#xff0c;涉及的范围也越来越广。很多我们以为跟GIS不相关的行业&#xff0c;都在悄悄用GIS技术。 从大类上分析&a…

EFuse概念解析

EFuse概念解析 EFUSE Key Parameter iNOM 代表的是&#xff0c;Efuse运行时候的电流 tNOM 代表的是&#xff0c;Efuse电流与时间的曲线 INOM通过VOC_Thrs设置 VOC_THRS VOC_THRS/Rsense Vsense采样小于VOC_THRS时候不动作 Vsense采样大于VOC_THRS时候根据Efuse_I2T曲线来…

SpringBoot之请求映射原理

前言 我们发出的请求&#xff0c;SpringMVC是如何精准定位到那个Controller以及具体方法&#xff1f;其实这都是 HandlerMapping 发挥的作用&#xff0c;这篇博文我们以 RequestMappingHandlerMapping 为例并结合源码一步步进行分析。 定义HandlerMapping 默认 HandlerMappi…

数据结构的队列,链表,栈的基础操作

1&#xff1a;队列 #include <stdio.h>#include <stdlib.h>#include "./02队列.h"/** function: 创建一个空的队列* param [ in] * param [out] * return */Sequeue* xinduilie(){Sequeue* sq (Sequeue*)malloc(sizeof(Sequeue)); if(N…

Linux基础IO【II】真的很详细

目录 一.文件描述符 1.重新理解文件 1.推论 2.证明 2.理解文件描述符 1.文件描述符的分配规则 3.如何理解文件操作的本质&#xff1f; 4.输入重定向和输出重定向 1.原理 2.代码实现重定向 3.dup函数 ​编辑 4.命令行中实现重定向 二.关于缓冲区 1.现象 …

Ubuntu系统中网易云音乐编译安装

项目地址&#xff1a; netease-cloud-music-gtk: Linux 平台下基于 Rust GTK 开发的网易云音乐播放器 目录 1.README.md中按照步骤来 2.安装git 3.报错 sudo apt install cmake sudo apt-get install libdbus-1-dev sudo apt install dnf sudo dnf install gettext 继…

【Pytorch】一文向您详细介绍 torch.nn.DataParallel() 的作用和用法

【Pytorch】一文向您详细介绍 torch.nn.DataParallel() 的作用和用法 下滑查看解决方法 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高…

云原生Kubernetes系列项目实战-k8s集群+高可用负载均衡层+防火墙

一、Kubernetes 区域可采用 Kubeadm 方式进行安装&#xff1a; 名称主机部署服务master192.168.91.10docker、kubeadm、kubelet、kubectl、flannelnode01192.168.91.11docker、kubeadm、kubelet、kubectl、flannelnode02192.168.91.20docker、kubeadm、kubelet、kubectl、flan…

【Numpy】一文向您详细介绍 np.trunc()

【Numpy】一文向您详细介绍 np.trunc() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;…

诊所管理系统免费软件哪个好一点?

不少诊所管理者&#xff0c;想要寻找一款适合自己诊所的免费诊所管理系统。市场上有多个选择&#xff0c;那么&#xff0c;哪个会好一点呢?在选择适合自己诊所的免费诊所管理系统时&#xff0c;考虑系统的易用性、功能全面性、技术支持以及未来可扩展性是非常重要的。下面&…

算法分析与设计期末考试复习GDPU

重点内容&#xff1a; 绪论&#xff1a; 简单的递推方程求解 1.19(1)(2) 、 教材例题 多个函数按照阶的大小排序 1.18 分治法&#xff1a; 分治法解决芯片测试问题 计算a^n的复杂度为logn的算法&#xff08;快速幂&#xff09; 分治法解决平面最近点对问…

值得关注的BTC二层 BitlayerLabs,以及好用的bitget钱包

值得关注的比特币二层 BitlayerLabs Bitlayer BitlayerLabs 是基于 BitVM 的与比特币安全等效的 Layer2。创新的BitRC-20资产框架为生态系统提供了丰富的资产类别。 为什么推荐bitlayer&#xff1f; Framework Ventures 和 ABCDE Capital 领投&#xff0c;OKX Ventures 等参…

微软开发基于深度学习的地球大气基础模型-Aurora

微软研究院的研究人员开发了大气基础模型“Aurora”&#xff0c;https://arxiv.org/abs/2405.13063v1 利用超过一百万小时的多样化天气和气候数据进行训练&#xff0c;能够预测各种大气条件&#xff0c;包括数据有限、变量异构和极端事件&#xff0c;并在全球空气污染和高分辨…

什么是CPT❓CPT中卖方责任是什么?

CPT :CPT 运费付至 &#xff08;……指定的目的地&#xff09; 运费付至&#xff08;……指定的地点&#xff09;”是指卖方向其指定的承运人交货&#xff0c;但卖方还必须支付将货物运至目的地的运费。即买方承担交货之后一切风险和其他费用。 “承运人”是指任何人&#xff…