設計模式學習---建立者模式(BuilderPattern)

java23種設計模式之一,英文叫Builder Pattern。其核心思想是將一個「複雜對象的構建算法」與它的「部件及組裝方式」分離,使得構件算法和組裝方式能夠獨立應對變化;複用一樣的構建算法能夠建立不一樣的表示,不一樣的構建過程能夠複用相同的部件組裝方式。java

概述

java23種設計模式之一,英文叫Builder Pattern。其核心思想是將一個「複雜對象的構建算法」與它的「部件及組裝方式」分離,使得構件算法和組裝方式能夠獨立應對變化;複用一樣的構建算法能夠建立不一樣的表示,不一樣的構建過程能夠複用相同的部件組裝方式。算法

主要優缺點

在建立者模式中,客戶端再也不負責對象的建立與組裝,而是把這個對象建立的責任交給其具體的建立者類,把組裝的責任交給組裝類,客戶端只負責對象的調用,從而明確了各個類的職責。設計模式

雖然利用建立者模式能夠建立出不一樣類型的產品,可是若是產品之間的差別巨大,則須要編寫多個建立者類才能實現,若是這是結合工廠模式更好。ide

組成部分

建立者模式主要由五個部分構成:組裝類,抽象建立者類,實現抽象建立者類的具體建立者類,抽象產品和實現抽象產品的具體產品類。測試

// Personui

public class Person {this

private String head;url

private String body;設計

private String foot;orm

public String getHead() {

return head;

}

public void setHead(String head) {

this.head= head;

}

public String getBody() {

return body;

}

public String getFoot() {

return foot;

}

public void setFoot(String foot) {

this.foot= foot;

}

public void setBody(String body) {

this.body= body;

}

}

//Builder接口

public interface PersonBuilder{

void buildHead();

void buildBody();

void buildFoot();

Person buildPerson();

}

//Builder實現:人類

publicclass HumanBuilder implements PersonBuilder {

private Person person;

public HumanBuilder(){

this.person=new Person();

}

public void buildBody() {

this.person.setBody("建立 人類 身體!");

}

publicvoid buildFoot() {

this.person.setFoot("建立 人類 腳!");

}

publicvoid buildHead() {

this.person.setHead("建立 人類 頭!");

}

public Person buildPerson() {

return person;

}

}

//Builder實現:變形金剛

publicclass TransformerBuilder implements PersonBuilder {

private Person person;

public TransformerBuilder(){

this.person=newPerson();

}

publicvoid buildBody() {

this.person.setBody("建立 變形金剛 身體!");

}

public void buildFoot() {

this.person.setFoot("建立 變形金剛 腳!");

}

publicvoid buildHead() {

this.person.setHead("建立 變形金剛 頭!");

}

public Person buildPerson() {

return person;

}

}

//Director構建嚮導

publicclass PersonDirector {

public Person constructPerson(PersonBuilder pb) {

pb.buildHead();

pb.buildBody();

pb.buildFoot();

return pb.buildPerson();

}

}

//測試

publicclass Test {

publicstaticvoid main(String[] args) {

PersonDirector pd = new PersonDirector();

Person person = pd.constructPerson(new HumanBuilder());

System.out.println(person.getBody());

System.out.println(person.getFoot());

System.out.println(person.getHead() +" \n");

Person transformer = pd.constructPerson(newTransformerBuilder());

System.out.println(transformer.getBody());

System.out.println(transformer.getFoot());

System.out.println(transformer.getHead());

}

}




備註:轉自http://baike.baidu.com/link?url=pWrg_QeuGfac7FBuSmiNp-Kg80_1Nocj8ej_JOwZe_dPg_c1h93qnXUHU34YnGt2Mfz1zAM27afK8whi7csNOkwKJ_LFMOU0O7E1PqBo8EzyQaQr7U4qkU5VJwj0D8RXFRCu1UukyNJTBp5-Xlv39K

相關文章
相關標籤/搜索