建造者模式(builder)(這個比較簡單)
定義:
使一個複雜對象的構造與它的表示分離,使同樣的構造方式可以構造不同的表示!
適用性:
1.當構造過程必須允許構造對象有不同的表示時;
2.當創建複雜對象的算法應該獨立於對象的組成部分以及它們的裝配方式時。
角色:
1.builder: 一個接口,爲創建一個產品對象的指定部件!
2.concreteBuilder:實現builder接口,完成對象的指定部件的具體創建,以及裝配,定義並明確他所創建的表示,並提供一個檢索產品的接口!
3.product:複雜對象,concreteBuilder中完成它的所有部件的具體創建以及對該對象的各部件的裝配!
4.Director:使用者,在這裏使用builder創建對象!
builder:
package pattern.creational.builder.builder;
import pattern.creational.builder.bean.Person;
public interface PersonBuilder {
public void createBody(String str);
public void createHead(String str);
public void createFoot(String str);
public Person createPerson();
}
package pattern.creational.builder.builder.impl;
import pattern.creational.builder.bean.Man;
import pattern.creational.builder.bean.Person;
import pattern.creational.builder.builder.PersonBuilder;
public class ManBuilder implements PersonBuilder {
private Person person;
public ManBuilder(){
person = new Man();
}
/* (non-Javadoc)
* @see pattern.builder.builder.PersonBuilder#createBody(java.lang.String)
*/
public void createBody(String str){
person.setBody(str);
}
/* (non-Javadoc)
* @see pattern.builder.builder.PersonBuilder#createHead(java.lang.String)
*/
public void createHead(String str){
person.setHead(str);
}
/* (non-Javadoc)
* @see pattern.builder.builder.PersonBuilder#createFoot(java.lang.String)
*/
public void createFoot(String str){
person.setFoot(str);
}
/* (non-Javadoc)
* @see pattern.builder.builder.PersonBuilder#createPerson()
*/
public Person createPerson(){
return person;
}
}
product:
package pattern.creational.builder.bean;
public class Person {
protected String head;
protected String body;
protected String foot;
public void setHead(String head) {
this.head = head;
}
public String getHead() {
return head;
}
public void setBody(String body) {
this.body = body;
}
public String getBody() {
return body;
}
public void setFoot(String foot) {
this.foot = foot;
}
public String getFoot() {
return foot;
}
}
package pattern.creational.builder.bean;
public class Man extends Person {
}
Director:
package pattern.creational.builder.director;
import pattern.creational.builder.bean.Person;
import pattern.creational.builder.builder.PersonBuilder;
/**
* 使用者
* @author silence
*
*/
public class Director {
public Person createPerson(PersonBuilder pb){
pb.createBody("建造男人的身體");
pb.createFoot("建造男人的腳");
pb.createHead("建造男人的頭");
return pb.createPerson();
}
}
test:
package pattern.creational.builder.test;
import pattern.creational.builder.bean.Man;
import pattern.creational.builder.builder.PersonBuilder;
import pattern.creational.builder.builder.impl.ManBuilder;
import pattern.creational.builder.director.Director;
public class Main {
public static void main(String[] args){
PersonBuilder pb = new ManBuilder();
Director director = new Director();
Man man = (Man) director.createPerson(pb);
System.out.println(man.getBody()+","+man.getFoot()+","+man.getHead());
}
}