設計模式之-建造者模式-Builder

悠悠隱於市發表於2011-04-17

 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

 

   適用性

    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());
	}
}
 
執行結果:
建立男人的頭部!
建立男人的身體!
建立男人的腳!
 
 

相關文章