天天看点

大话设计模式——09建造者模式

一、直接画

public class RunMain {

	public static void main(String[] args) {
		
		System.out.println("一个瘦子");
		System.out.println("头");
		System.out.println("躯干");
		System.out.println("左脚");
		System.out.println("右手");
		System.out.println("左脚");
		System.out.println("右脚");
		
		System.out.println("一个胖子");
		System.out.println("头");
		System.out.println("躯干");
		System.out.println("左脚");
		System.out.println("右手");
		System.out.println("左脚");
		// System.out.println("右脚");

	}

}
           

二、通过类画

public class PersonThinBuilder {

	public void build() {
		System.out.println("一个瘦子");
		System.out.println("头");
		System.out.println("躯干");
		System.out.println("左脚");
		System.out.println("右手");
		System.out.println("左脚");
		System.out.println("右脚");
	}
	
}

public class PersonFatBuilder {

	public void build() {
		System.out.println("一个胖子");
		System.out.println("头");
		System.out.println("躯干");
		System.out.println("左脚");
		System.out.println("右手");
		System.out.println("左脚");
		System.out.println("右脚");
	}

}
           
public class RunMain {

	public static void main(String[] args) {
		
		// 通过类画,但如果需求需要加一个高个子的人,不注意又缺胳膊少腿呢?最好的办法是规定,凡是建造小人,都必须有头有身有胳膊有腿。
		PersonThinBuilder tb = new PersonThinBuilder();
		tb.build();
		
		PersonFatBuilder fb = new PersonFatBuilder();
		fb.build();
		
	}

}
           

三、建造者模式

// Builder是为创建一个Product对象的各个部件指定的抽象接口
public abstract class PersonBuilder {

	public abstract void describe();
	public abstract void buildHead();
	public abstract void buildBody();
	public abstract void buildArmLeft();
	public abstract void buildArmRight();
	public abstract void buildLegLeft();
	public abstract void buildLegRight();
	
}
           
// 具体建造者,实现Builder接口,构建和装配各个部件。
public class PersonHighBuilder extends PersonBuilder {

	@Override
	public void describe() {
		System.out.println("一个高个子的人");
	}
	
	@Override
	public void buildHead() {
		System.out.println("头");
	}

	@Override
	public void buildBody() {
		System.out.println("躯干");
	}

	@Override
	public void buildArmLeft() {
		System.out.println("左脚");
	}

	@Override
	public void buildArmRight() {
		System.out.println("右手");
	}

	@Override
	public void buildLegLeft() {
		System.out.println("左脚");
	}

	@Override
	public void buildLegRight() {
		System.out.println("右脚");
	}

}
           
// 指挥者,是构建一个使用Builder接口的对象。用来控制建造过程,也用它隔离用户与建造过程的关联。
public class PersonDirector {
	
	private PersonBuilder pb;

	public PersonDirector(PersonBuilder pb) { // 用户告诉指挥者,我需要什么样的小人
		this.pb = pb;
	}
	
	public void createPerson() {
		pb.describe();
		pb.buildHead();
		pb.buildBody();
		pb.buildArmLeft();
		pb.buildArmRight();
		pb.buildLegLeft();
		pb.buildLegRight();
	}
	
}
           
public class RunMain {

	public static void main(String[] args) {
		
		// 建造的过程是稳定的,但建造的细节是不同的。如果你需要将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示时,我们就需要应用建造者模式。
		// 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
		// 用户只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。
		PersonHighBuilder hb = new PersonHighBuilder();
		PersonDirector pdHigh = new PersonDirector(hb);
		pdHigh.createPerson();
		
	}

}
           

继续阅读