Skip to content

Pipeline 管道模式

概述

Pipeline 模式为管道模式,也称为流水线模式。通过预先设定好的一系列的阶段来处理输入的数据,每个阶段的输出即是下一个阶段的输入。

应用场景

  1. 数据处理, 数据清洗, 转换, 归一化、特征提取等, 这些每一个阶段可以当作 Pipeline 的一部分
  2. 图像处理, 颜色空间转换,滤波、边缘检测、特征提取等, 组合撑 Pipeline,可以轻松构建图像数据

Java Stream API 可以认为是一种 pipeline 的落地实现

业务编排也可以采用这种方式

示例代码

  1. 定义 Step 接口
java
public interface Step<INPUT,OUTPUT> {
    OUTPUT step(INPUT in);
}
  1. 定义 Pipeline 管道
java
public class Pipeline<INPUT,OUTPUT> {

    private final Step<INPUT,OUTPUT> currentStep;

    public Pipeline(Step<INPUT,OUTPUT> currentStep) {
        this.currentStep = currentStep;
    }

    public <NewOUT> Pipeline<INPUT, NewOUT> add(Step<OUTPUT, NewOUT> nextStep) {
        Step<INPUT, NewOUT> combinedStep = in -> nextStep.step(currentStep.step(in));
        return new Pipeline<>(combinedStep);
    }

    public OUTPUT execute(INPUT input) {
        return currentStep.step(input);
    }

}
  1. 测试
  • Long 转 Date 步骤
java

   public static class LongToTimestampStep implements Step<Long, Date> {
        public Date step(Long input) {
            return new Date(input);
        }
    }
  • Date 转 String 格式
java
    public static class DateToStringFormat implements Step<Date, String> {

        @Override
        public String step(Date in) {
            return DateUtil.format(in,"yyyy-MM-dd");
        }
    }
java
public class Client {

    public static void main(String[] args) {
        LongToTimestampStep timestampStep = new LongToTimestampStep();
        DateToStringFormatStep dateToStringFormat = new DateToStringFormatStep();
        Pipeline<Long, String> pipeline = new Pipeline<>(timestampStep)
                .add(dateToStringFormat);
        System.out.println(pipeline.execute(System.currentTimeMillis()));
    }
}

输出

text
2024-09-12

Released under the MIT License.