类图
时序图
阀门接口
/*** 阀门接口* @author administrator**/
public interface Valve {public String getName();public void invoke( Context context );
}
基本阀门
/*** 基础阀门* @author administrator**/
public class BasicValve implements Valve{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public BasicValve(String name) {super();this.name = name;}/*** 阀门通用方法*/public void invoke( Context context ){System.out.println( name + "阀门完成操作。" );}
}
其它阀门
/*** 一般阀门对象* @author administrator**/
public class CommValve implements Valve{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public CommValve(String name) {super();this.name = name;}public void invoke( Context context ){System.out.println( name + "阀门完成操作。" );context.invokeNext();}
}
管道流
/*** 管道对象* @author administrator**/
public class Pipeline {List<Valve> valves = new ArrayList<Valve>();/*** 基础阀门*/private Valve basic;public Valve getBasic() {return basic;}public void setBasic(Valve basic) {this.basic = basic;}public Pipeline(Valve basic) {super();this.basic = basic;}/*** 添加 阀门* @param v*/public void addValve( Valve v ){valves.add( v );}public void invoke(){Context context = new Context( valves.iterator(), this );context.invokeNext();}
}
上下文
/*** 上下文对象* @author administrator**/
public class Context {private Iterator<Valve> valveIterator;private Pipeline pipeline;public Context(Iterator<Valve> valveIterator, Pipeline pipeline) {super();this.valveIterator = valveIterator;this.pipeline = pipeline;}public void invokeNext(){if( valveIterator.hasNext() ){Valve valve = valveIterator.next();valve.invoke( this );}else{pipeline.getBasic().invoke( this );}}
}
测试类
public class TestMain {/*** @param args*/public static void main(String[] args) {Pipeline line = new Pipeline( new BasicValve( "Basic" ) );line.addValve( new CommValve( "A" ) );line.addValve( new CommValve( "B" ) );line.addValve( new CommValve( "C" ) );line.addValve( new CommValve( "D" ) );line.invoke();}}
运行结果
A阀门完成操作。
B阀门完成操作。
C阀门完成操作。
D阀门完成操作。
Basic阀门完成操作。