Pipeline 管道模式
概述
Pipeline 模式为管道模式,也称为流水线模式。通过预先设定好的一系列的阶段来处理输入的数据,每个阶段的输出即是下一个阶段的输入。
应用场景
- 数据处理, 数据清洗, 转换, 归一化、特征提取等, 这些每一个阶段可以当作 Pipeline 的一部分
- 图像处理, 颜色空间转换,滤波、边缘检测、特征提取等, 组合撑 Pipeline,可以轻松构建图像数据
Java Stream API 可以认为是一种 pipeline 的落地实现
业务编排也可以采用这种方式
示例代码
- 定义 Step 接口
java
public interface Step<INPUT,OUTPUT> {
OUTPUT step(INPUT in);
}
- 定义 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);
}
}
- 测试
- 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