管道( Pipeline )模型--示例

前端之家收集整理的这篇文章主要介绍了管道( Pipeline )模型--示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

类图


时序图



阀门接口

/**
 * 阀门接口
 * @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阀门完成操作。

猜你在找的设计模式相关文章