java設計模式之建造者模式,java設計模式建造

來源:互聯網
上載者:User

java設計模式之建造者模式,java設計模式建造
本文繼續介紹23種設計模式系列之建造者模式。

定義:建造者模式:將一個複雜的對象的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
實用範圍1、當建立複雜物件的演算法應該獨立於該對象的組成部分以及它們的裝配方式時。2、當構造過程必須允許被構造的對象有不同表示時。
角色在這樣的設計模式中,有以下幾個角色:1、Builder:為建立一個產品對象的各個組件指定抽象介面。2、ConcreteBuilder:實現Builder的介面以構造和裝配該產品的各個組件,定義並明確它所建立的表示,並提供一個檢索產品的介面。3、Director:構造一個使用Builder介面的對象,指導構建過程。4、Product:表示被構造的複雜物件。ConcreteBuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成組件的類,包括將這些組件裝配成最終產品的介面。
角色Builder:

public interface PersonBuilder {     void buildHead();     void buildBody();     void buildFoot();     Person buildPerson();}

角色ConcreteBuilder:
public class ManBuilder implements PersonBuilder {     Person person;     public ManBuilder() {          person = new Man();     }     public void buildbody() {          person.setBody("建造男人的身體");     }     public void buildFoot() {          person.setFoot("建造男人的腳");     }     public void buildHead() {          person.setHead("建造男人的頭");     }     public Person buildPerson() {          return person;     }}

角色ConcreteBuilder:
public class WomanBuilder implements PersonBuilder {     Person person;     public WomanBuilder() {          person = new Woman();     }     public void buildbody() {          person.setBody(“建造女人的身體");     }     public void buildFoot() {          person.setFoot(“建造女人的腳");     }     public void buildHead() {          person.setHead(“建造女人的頭");     }     public Person buildPerson() {          return person;     }}

角色Director:
public class PersonDirector {     public Person constructPerson(PersonBuilder pb) {          pb.buildHead();          pb.buildBody();          pb.buildFoot();          return pb.buildPerson();     }}

角色Product:
public class Person {     private String head;     private String body;     private String foot;     public String getHead() {          return head;     }     public void setHead(String head) {          this.head = head;     }     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;     }}public class Man extends Person {     public Man(){          System.out.println(“開始建造男人");     }}public class Woman extends Person {     public Woman(){          System.out.println(“開始建造女人");     }}

測試:
public class Test{     public static void main(String[] args) {          PersonDirector pd = new PersonDirector();          Person womanPerson = pd.constructPerson(new ManBuilder());          Person manPerson = pd.constructPerson(new WomanBuilder());     }}

建造者模式在使用過程中可以演化出多種形式:如果具體的被建造對象只有一個的話,可以省略抽象的Builder和Director,讓ConcreteBuilder自己扮演指導者和建造者雙重角色,甚至ConcreteBuilder也可以放到Product裡面實現。在《Effective Java》書中第二條,就提到“遇到多個構造器參數時要考慮用構建器”,其實這裡的構建器就屬於建造者模式,只是裡面把四個角色都放到具體產品裡面了。
上面例子如果只製造男人,演化後如下:
public class Man {     private String head;     private String body;     private String foot;     public String getHead() {          return head;     }     public void setHead(String head) {          this.head = head;     }     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;     }}

public class ManBuilder{     Man man;     public ManBuilder() {          man = new Man();     }     public void buildbody() {          man.setBody("建造男人的身體");     }     public void buildFoot() {          man.setFoot("建造男人的腳");     }     public void buildHead() {          man.setHead("建造男人的頭");     }     public Man builderMan() {          buildHead();          buildBody();          buildFoot();          return man;     }}

測試:
public class Test{     public static void main(String[] args) {          ManBuilder builder = new ManBuilder();          Man man = builder.builderMan();     }}

更多設計模式:23種設計模式系列


作者:jason0539

部落格:http://blog.csdn.net/jason0539(轉載請說明出處)

掃碼關注我公眾號






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.