将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

   适用性


1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2.当构造过程必须允许被构造的对象有不同的表示时。



参与者


1.Builder 为创建一个Product对象的各个部件指定抽象接口。 2.ConcreteBuilder 实现Builder的接口以构造和装配该产品的各个部件。 定义并明确它所创建的表示。 提供一个检索产品的接口。 3.Director 构造一个使用Builder接口的对象。 4.Product 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

package pack.java.model;

public class Person {
	private String header;
	private String body;
	private String foot;
	
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public Person(String header, String body, String foot) {
		super();
		this.header = header;
		this.body = body;
		this.foot = foot;
	}
	
	public String getHeader() {
		return header;
	}
	public void setHeader(String header) {
		this.header = header;
	}
	public String getBody() {
		return body;
	}
	public void setBody(String body) {
		this.body = body;
	}
	public String getFoot() {
		return foot;
	}
	public void setFoot(String foot) {
		this.foot = foot;
	}
}

package pack.java.model;

public class Man extends Person {

}

package pack.java.buliderinterface;

import pack.java.model.Person;

public interface PersonBulider {
	/**
	 * 创建头部;
	 */
	public void buliderHeader();
	
	/**
	 * 创建身体;
	 */
	public void buliderBody();
	
	/**
	 * 创建脚;
	 */
	public void buliderFoot();
	
	/**
	 * 创建一个完整的人;
	 * @return
	 */
	public Person buliderPerson();
}

package pack.java.buliderinterfaceimpl;

import pack.java.buliderinterface.PersonBulider;
import pack.java.model.Person;

public class ManBuilder implements PersonBulider{
	
	private Person person = null;
	
	public ManBuilder(){
		person =  new Person();
	}
	
	public void buliderBody() {
		// TODO Auto-generated method stub
		person.setBody("创建男人的身体!");
	}

	public void buliderFoot() {
		// TODO Auto-generated method stub
		person.setFoot("创建男人的脚!");
	}

	public void buliderHeader() {
		// TODO Auto-generated method stub
		person.setHeader("创建男人的头部!");
	}

	public Person buliderPerson() {
		// TODO Auto-generated method stub
		return person;
	}

}

package pack.java.buliderinterfaceimpl;

import pack.java.buliderinterface.PersonBulider;
import pack.java.model.Person;

public class PersonDirector {
	/**
	 * 构造人的方法;
	 * 传入接口;
	 * @param personBulider
	 * @return 一个人的实体;
	 */
	public Person constructPerson(PersonBulider personBulider){
		personBulider.buliderHeader();
		personBulider.buliderBody();
		personBulider.buliderFoot();
		Person person = personBulider.buliderPerson();
		return person;
	}
}

package pack.java.bulider.test;

import pack.java.buliderinterfaceimpl.ManBuilder;
import pack.java.buliderinterfaceimpl.PersonDirector;
import pack.java.model.Person;

public class TestBuilderPersion {
	public static void main(String[] args) {
		PersonDirector personDirector = new PersonDirector();
		Person person = personDirector.constructPerson(new ManBuilder());
		System.out.println(person.getHeader());
		System.out.println(person.getBody());
		System.out.println(person.getFoot());
	}
}

运行结果:

创建男人的头部!
创建男人的身体!
创建男人的脚!