pipeline设计模式使用

简介: pipeline设计模式使用

如果让你实现一个pipeline模式?如何实现,让代码看起来不那么臃肿。

首先需要考虑,它是一个链路的流程,同时具备一个固定的模式进行着。此时,我们就可以考虑使用pipeline模式。pipeline模式中的两大重要的操作:

                                     组装和处理

也即:定义handler和pipeline,进行pipeline组装和handler处理

因为只要组装成pipeline后,才可以进行流水线的操作。

因此,我们可以基于pipeline的骨架,然后实现一个简单的案例,而这个案例可能就是你需要的有序操作。通常适应的场景,比如业务逻辑,需要按照顺序执行,不能并行的时候,就可以使用。

一、定义处理的handler接口

public interface Handler<I,O> {
    O proccess(I input);
}

二、定义pipeline,组装数据和执行数据处理

public class Pipeline<I,O> {
    // 定义handler
    private final Handler<I,O> currentHandler;
    public Pipeline(Handler<I, O> currentHandler) {
        this.currentHandler = currentHandler;
    }
    //添加处理数据的handler
    public <K> Pipeline<I,K> addHandler(Handler<O, K> newHandler) {
        return new Pipeline<>(input -> newHandler.proccess(currentHandler.proccess(input)));
    }
    //执行对应handler的处理
    public O execute(I input) {
        return  currentHandler.proccess(input);
    }
}

三、定义处理业务逻辑的handler,这里主要有两个

public class Test1Handler implements Handler<Integer,Integer> {
    @Override
    public Integer proccess(Integer input) {
        Integer num = input + 2;
        System.out.println("Test1Handler==="+num);
        return num;
    }
}
public class Test2Handler implements Handler<Integer,Integer> {
    @Override
    public Integer proccess(Integer input) {
        Integer num = input + 3;
        System.out.println("Test2Handler==="+num);
        return num;
    }
}

四、执行组装和具体业务结果返回

public class HandlerDemoTest {
   @Test
   public void testAddHandlersToPipeline() {
       Pipeline pipelineResult = new Pipeline<>(new Test1Handler()).addHandler(new Test2Handler());
       Integer number = 1;
       Integer nums = (Integer) pipelineResult.execute(number);
       System.out.println(nums);
   }
}

可以看到具体的骨架就只有两个类,然后组装是基于 Pipeline pipelineResult = new Pipeline<>(new Test1Handler()).addHandler(new Test2Handler());进行组装的,而处理的逻辑是基于 pipelineResult.execute(number)实现的。

看到这里是不是直接也想去试一下。

目录
相关文章
|
11月前
|
人工智能 安全 Java
SpecKit 在成熟 Java 项目中的 AI 编码实践
本文探索AI Code与SpecKit在Java应用中的实践,结合规格驱动开发(SDD)与测试驱动开发(TDD),通过定义原则、需求规格化、技术方案设计等步骤,实现风格统一、可追溯的AI辅助编码。分享选型考量、执行流程及问题优化,总结经验并沉淀为应用级知识资产,提升研发效率与代码规范性。(239字)
3152 13
SpecKit 在成熟 Java 项目中的 AI 编码实践
|
数据采集 存储 测试技术
Python生成随机数插件Faker的用法
Python生成随机数插件Faker的用法
946 0
|
数据采集 人工智能 自然语言处理
Playwright MCP 浏览器自动化框架全面解析
Playwright MCP是微软推出的开源项目,结合Playwright与MCP协议,让AI通过结构化数据直接操作浏览器。告别传统视觉识别,实现高效、精准的网页自动化,广泛应用于测试、爬虫、办公自动化等场景,大幅提升效率与可靠性。
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1829 23
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
1178 10
|
Oracle Java 关系型数据库
聊聊 datax 的 OceanBase 数据同步插件 ||批处理参数 rewriteBatchedStatements=true&useCursorFetch=true
聊聊 datax 的 OceanBase 数据同步插件 分析下批处理参数 rewriteBatchedStatements=true&useCursorFetch=true 对大规模数据读写的性能影响
聊聊 datax 的 OceanBase 数据同步插件 ||批处理参数 rewriteBatchedStatements=true&useCursorFetch=true
|
数据安全/隐私保护
ensp中基本acl 原理及配置命令(详解)
ensp中基本acl 原理及配置命令(详解)
1813 1