Java 实现建造者(Builder)模式

建造者(Builder)模式是创建型模式,创建了一个对外隐藏创建过程的产品,使用组合的方式,由指挥者(Director)来决定建造的流程

public interface Builder {
	void buildPartA();
	void buildPartB();
	void buildPartC();
	
}

public class BuilderImpl implements Builder {
	
	@Override
	public void buildPartA() {
		System.out.println("建造部件A");
	}

	@Override
	public void buildPartB() {
		System.out.println("建造部件B");
	}

	@Override
	public void buildPartC() {
		System.out.println("建造部件C");
	}

}

public class BuilderImpl2 implements Builder {
	
	@Override
	public void buildPartA() {
		System.out.println("建造部件AA");
	}

	@Override
	public void buildPartB() {
		System.out.println("建造部件BB");
	}

	@Override
	public void buildPartC() {
		System.out.println("建造部件CC");
	}

}

/**
 * 指挥者:指导 如何 建造
 * 组合Builder
 * @author stone
 *
 */
public class Director {
	private Builder builder;
	
	public Director(Builder builder) {
		this.builder = builder;
	}
	/**
	 * 建造方法:定义了建造的流程
	 * 如果需要其他流程来实现,再new一个指挥者Director就可
	 */
	public void construct() {
		System.out.println("director 指挥 builder进行建造");
		builder.buildPartA();
		builder.buildPartB();
		builder.buildPartC();
	}
	
}

/**
 * 指挥者:指导 如何 建造
 * 组合Builder
 * @author stone
 *
 */
public class Director2 {
	private Builder builder;
	
	public Director2(Builder builder) {
		this.builder = builder;
	}
	/**
	 * 建造方法:定义了建造的流程
	 * 如果需要其他流程来实现,再new一个指挥者Director就可
	 */
	public void construct() {
		System.out.println("director2 指挥 builder进行建造");
		builder.buildPartB();
		builder.buildPartC();
		builder.buildPartA();
	}
	
}

/* 
 * 建造者模式:建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,
 * 
 * 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式
 */
public class Test {
	public static void main(String[] args) {
		Builder builder = new BuilderImpl();
		Director director = new Director(builder);
		/*
		 * 同样的构建过程,不同的模块(buildPartA、buildPartB、buildPartC)实现, new一个builder的实现
		 * 不同的构建过程,new 一个director
		 * 不同的构建过程,不同的模块实现, new director,new builder
		 */
		
		director.construct();
		
		System.out.println("");
		
		Builder builder2 = new BuilderImpl2();
		Director director2 = new Director(builder2);
		director2.construct();
		
		System.out.println("");
		
		Builder builder3 = new BuilderImpl2();
		Director2 director3 = new Director2(builder3);
		director3.construct();
	}
}

打印:

director 指挥 builder进行建造
建造部件A
建造部件B
建造部件C

director 指挥 builder进行建造
建造部件AA
建造部件BB
建造部件CC

director2 指挥 builder进行建造
建造部件BB
建造部件CC
建造部件AA


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。