gistfile1.txt public interface Valve { void invoke(ValveContext valveContext);}public interface ValveContext { void invokeNext();}public class Pipeline { private List valves; private Valve basic; private ValveContext valveContext; public Pi
public interface Valve { void invoke(ValveContext valveContext); } public interface ValveContext { void invokeNext(); } public class Pipeline { private Listvalves; private Valve basic; private ValveContext valveContext; public Pipeline(Valve basic) { this.basic = basic; valves = Lists.newLinkedList(); valveContext = new PipelineValueContext(); } public void addValve(Valve valve) { valves.add(valve); } public void invoke() { valveContext.invokeNext(); } public class PipelineValueContext implements ValveContext { private int stage = 0; public void invokeNext() { int next = stage; stage ++; if (next < valves.size()) { valves.get(next).invoke(this); } else if (next == valves.size() && basic != null ) { basic.invoke(this); } } } } /********************************Test****************** public static void main(String[] args) { FirstValve firstValve = new FirstValve(); SecondValve secondValve = new SecondValve(); BasicValve basicValve = new BasicValve(); Pipeline pipeline = new Pipeline(basicValve); pipeline.addValve(firstValve); pipeline.addValve(secondValve); pipeline.invoke(); }