यह पाइपलाइन के कार्यान्वयन के संबंध में एक डिज़ाइन प्रश्न है। निम्नलिखित मेरा निष्पक्ष कार्यान्वयन है। पाइप लाइन में कदम/चरणों में सेपाइपलाइन डिजाइन पैटर्न कार्यान्वयन
public interface Step<T, U> {
public U execute(T input);
}
कंक्रीट कार्यान्वयन:
public class StepOne implements Step<Integer, Integer> {
@Override
public Integer execute(Integer input) {
return input + 100;
}
}
public class StepTwo implements Step<Integer, Integer> {
@Override
public Integer execute(Integer input) {
return input + 500;
}
}
public class StepThree implements Step<Integer, String> {
@Override
public String execute(Integer input) {
return "The final amount is " + input;
}
}
पाइपलाइन वर्ग पकड़/पाइप लाइन में चरणों में दर्ज किए जाएंगे और
पाइप लाइन में अलग-अलग चरणों/चरणों के लिए इंटरफ़ेस उन्हें एक के बाद निष्पादित करें:
public class Pipeline {
private List<Step> pipelineSteps = new ArrayList<>();
private Object firstStepInput = 100;
public void addStep(Step step) {
pipelineSteps.add(step);
}
public void execute() {
for (Step step : pipelineSteps) {
Object out = step.execute(firstStepInput);
firstStepInput = out;
}
}
}
डाइवर प्रोग्राम निष्पादन ते पाइपलाइन:
public class Main {
public static void main(String[] args) {
Pipeline pipeline = new Pipeline();
pipeline.addStep(new StepOne());
pipeline.addStep(new StepTwo());
pipeline.addStep(new StepThree());
pipeline.execute();
}
}
हालांकि, जैसा कि आप देख सकते हैं कि निष्पक्ष कार्यान्वयन में कई सीमाएं हैं।
प्रमुखों में से एक यह है कि आवश्यकता यह है कि प्रत्येक चरण का उत्पादन किसी भी प्रकार का हो सकता है, निष्पक्ष कार्यान्वयन टाइप-सुरक्षित नहीं है (पाइपलाइन वर्ग में निष्पादन विधि)। अगर मैं पाइपलाइन में चरणों को गलत तरीके से तारित करता हूं, तो ऐप असफल हो जाएगा।
क्या कोई मुझे कोड किए गए समाधान को जोड़कर समाधान तैयार करने में मदद कर सकता है, या इसे हल करने के लिए मुझे पहले से मौजूद मौजूदा पैटर्न की ओर इशारा कर सकता है?
[इस सवाल] (http://stackoverflow.com/questions/5686332/pipeline-pattern-implementation-in-java) [इस दस्तावेज़] के लिंक (http://parlab.eecs.berkeley.edu/wiki/_media/patterns/pipeline-v1.pdf) जो पैटर्न का संदर्भ देता है। –
पेपर को इंगित करने के लिए @ निकबेल धन्यवाद। हालांकि, कागज के माध्यम से, मैं समझ नहीं पा रहा हूं कि पाइपलाइन को कैसे डिजाइन किया जा सकता है ताकि यह विभिन्न आउटपुट प्रकारों के चरणों/चरणों को संभाल सके। –
मैं [जावा 1.8+ धाराओं] (https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html) को देखने पर विचार करता हूं क्योंकि वे [कार्यक्षमता] प्रदान करते हैं (https://docs.oracle.com/javase/tutorial/collections/streams/)/[डॉक्टर] [http://www.oracle.com/technetwork/articles/java/ma14-java-se-8- स्ट्रीम- 2177646.html) उदाहरण के लिए आपने कहा है। [डुप्लिकेट] के लिए यहां देखें (http://stackoverflow.com/questions/8680610/java-generics-chaining-together-generic-function-object) –