作者:技术潜行者 | 来源:互联网 | 2023-10-13 11:27
这是关于管道实现的设计问题。其中一个主要的问题是,由于要求每个步骤的输出可以是任何类型,所以朴素的实现不是类型安全的。如果我碰巧不正确地连线管道中的步骤,该应用程序将失败。任何人都
这是关于管道实现的设计问题。 以下是我天真的实施。 流水线设计模式的实现
界面的每个步骤/阶段:在管线的步骤/阶段
公共接口步骤{
Publicuexecute(tinput;
}
具体实施:
publicclasssteponeimplementsstep {
@Override
publicintegerexecute (集成输入) {
返回输入100;
}
}
publicclasssteptwoimplementsstep {
@Override
publicintegerexecute (集成输入) {
返回输入500;
}
}
publicclassstepthreeimplementsstep {
@Override
公共字符串执行(integer input ) {
返回' the final amount is ' input;
}
}
管道类保留/注册管道中的步骤,然后按顺序执行它们。
公共类pipeline {
privatelistpipelinesteps=new ArrayList (;
privateobjectfirststepinput=100;
publicvoidaddstep (步骤步骤) {
pipelinesteps.add(step;
}
公共语音执行
for(stepstep3360pipelinesteps ) {
objectout=step.execute (firststepinput;
firstStepInput=out;
}
}
}
潜水员程序执行te管道:
公共类主{
publicstaticvoidmain (字符串[ ] args ) {
Pipeline pipeline=new Pipeline (;
pipeline.addstep(newstepone ) );
pipeline.addstep(newsteptwo ) );
pipeline.addstep(newstepthree ) );
pipeline.execute (;
}
}
但是,正如你看到的,天真的实现有很多限制。
主要问题之一是简单的实现不安全,因为要求每个步骤的输出可以是任何类型(如何在Pipeline类中运行)。 如果碰巧未正确连接到管道中的步骤,则APP应用程序将失败。
每个人都会帮助我设计的解决方案。 可以通过添加我编码的东西或指向已经存在的模式来解决这个问题吗?
1
[此问题] 65http://堆栈overflow.com/questions/5686332/pipeline-pattern-implementation-in-Java ]为[该文献] 65333http://PP
0
谢谢@NickBell指向这篇论文。 但是,这篇论文不了解管道的设计方法,所以可以处理不同输出类型的阶段/步骤。
2
考虑“[Java 1.8流”(https://docs.Oracle.com/Java se/8/docs/API/Java/util/stream/package-summary.html ) 它们是[功能] 653359 docs.Oracle.com/Java se/tutorial/collections/streams/)/[ doc ' s ] 653http://www.Oracle.com/查看questions/8680610/Java-generics-chaining-together-generic-function-obj erics ()