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 List
valves;
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();
}
