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)实现的。

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

目录
相关文章
|
6月前
|
设计模式 Java
Java一分钟之-设计模式:观察者模式与事件驱动
【5月更文挑战第17天】本文探讨了Java中实现组件间通信的观察者模式和事件驱动编程。观察者模式提供订阅机制,当对象状态改变时通知所有依赖对象。然而,它可能引发性能问题、循环依赖和内存泄漏。代码示例展示了如何实现和避免这些问题。事件驱动编程则响应用户输入和系统事件,但回调地狱和同步/异步混淆可能造成困扰。JavaFX事件驱动示例解释了如何处理事件。理解这两种模式有助于编写健壮的程序。
81 1
|
6月前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
设计模式 Java 应用服务中间件
【设计模式——学习笔记】23种设计模式——职责链/责任链模式(Chain of Responsibility)(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——职责链/责任链模式(Chain of Responsibility)(原理讲解+应用场景介绍+案例介绍+Java代码实现)
144 0
|
设计模式 XML JSON
Pipeline设计模式,确定不了解一下?
Pipeline设计模式是我在来新公司才接触到的,也是在项目上广泛使用的一种东西。觉得挺有意思的,所以写一篇文章向大家介绍一下,希望大家喜欢。
2526 5
|
设计模式 Java
设计模式与范式 --- 行为型模式(观察者模式)
设计模式与范式 --- 行为型模式(观察者模式)
设计模式与范式 --- 行为型模式(观察者模式)
|
设计模式 算法 Java
设计模式与范式 --- 行为型模式(模板方法模式)
设计模式与范式 --- 行为型模式(模板方法模式)
设计模式与范式 --- 行为型模式(模板方法模式)
|
设计模式 算法 搜索推荐
23种设计模式(五)- 模板方法设计模式
23种设计模式(五)- 模板方法设计模式
153 0
23种设计模式(五)- 模板方法设计模式
|
设计模式 缓存 Java
设计模式与范式 --- 结构型模式(装饰器模式)
设计模式与范式 --- 结构型模式(装饰器模式)
|
设计模式 缓存 算法
设计模式与范式 --- 行为型模式(策略模式)
设计模式与范式 --- 行为型模式(策略模式)
|
设计模式 前端开发 Java
探究netty的观察者设计模式
探究netty的观察者设计模式
146 0