案例来源:
https://blog.csdn.net/qq_37913997/article/details/121027621
其他参考资料:
1.https://blog.csdn.net/u012810020/article/details/71194853👍👍👍
2.https://blog.csdn.net/qq_35387940/article/details/86006424
场景:
该场景描述的是一个待检产品在流水线上检查,产品有两个属性,长度和宽度,流水线上的处理节点也有两个,即长度检查节点和宽度检查节点。为帮助理解,该场景设置的较为简单,实际开发工作中,待检查对象(请求)可以为上下文对象,附带较多属性,同时检查处理节点也可有多个,它们之间是相互独立的。
待检验的产品
public class Product {
// 产品长度
private int length;
// 产品宽度
private int width;
// 省略get和set以及构造函数......
}
产品校验的流程链
import java.util.ArrayList;
import java.util.List;
public class ProcessorChain {
// 校验的方法List
private List<Processor> processorList = new ArrayList<>();
// 校验方法的index
private int index = 0;
// 向List中添加校验的方法
public void addProcessor(Processor processor) {
processorList.add(processor);
}
// 调用执行具体的校验
public boolean process(Product product, ProcessorChain chain) {
// 当所有的校验都被执行完毕
if(processorList.size() == index) {
return true;
}
// 获取当前执行的校验节点
Processor processor = processorList.get(index);
// 累计下一次应该执行的节点index
index++;
// 执行当前节点的校验
return processor.process(product, chain);
}
}
校验接口
public interface Processor {
// Product: 待校验的产品 ProcessorChain: 校验流程链
boolean process(Product request, ProcessorChain chain);
}
具体校验实现类
⏹长度校验
public class LengthCheckProcessor implements Processor {
@Override
public boolean process(Product request, ProcessorChain chain) {
Integer length = request.getLength();
if (length < 100 && length > 50) {
System.out.println("产品长度检验通过");
// 调用校验链中的下一个链,进行校验
return chain.process(request, chain);
}
// 当产品长度未检验通过的的时候,终止校验链
System.out.println("产品长度未检验通过");
return false;
}
}
⏹宽度校验
public class WidthCheckProcessor implements Processor{
@Override
public boolean process(Product request, ProcessorChain chain) {
Integer width = request.getWidth();
if (width < 100 && width > 50) {
System.out.println("产品宽度检验通过");
// 调用校验链中的下一个链,进行校验
return chain.process(request, chain);
}
// 当产品宽度未检验通过的的时候,终止校验链
System.out.println("产品宽度未检验通过");
return false;
}
}
调用
public class Main {
public static void main(String[] args) {
// 后台收到的待校验的产品数据
int[][] arrays = {{60, 60}, {40, 40}, {40, 60}, {60, 40}};
ProcessorChain processorChain = null;
for (int[] array : arrays) {
// 创建校验流程链
processorChain = new ProcessorChain();
// 向校验链中添加长度校验
processorChain.addProcessor(new LengthCheckProcessor());
// 向校验链中添加宽度校验
processorChain.addProcessor(new WidthCheckProcessor());
// 构造待校验的产品
Product product = new Product(array[0], array[1]);
// 调用校验流程链进行校验
boolean checkResult = processorChain.process(product, processorChain);
if(checkResult) {
System.out.println("产品最终检验合格");
} else {
System.out.println("产品最终检验不合格");
}
System.out.println("------");
}
}
}