Java設計模式——構造者模式(Builder)

來源:互聯網
上載者:User

標籤:設計模式   構造者模式   java   

建造模式是對象的建立模式。建造模式可以將一個產品的內部對象與產品的生產過程分割開啦,從而可以使一個建造過程產生具有不同的內部表象的產品對象。
對象性質的構造:
有些情況下,一個對象會有一些重要的性質,在它們沒有恰當的值之前,對象不能作為一個完整的產品使用。比如,一個電子郵件有寄件者地址、收件者地址、主題、內容、附錄等部分,而在最起碼的收件者地址得到賦值之前,這個電子郵件不能發送。
有些情況下,一個對象的一些性質必須按照某個順序賦值才有意義。在某個性質沒有賦值之前,另一個性質則無法賦值。這些情況使得性質本身的建造涉及到複雜的商業邏輯。這時候,此對象相當於一個有待建造的產品,而對象的這些性質相當於產品的零件,建造產品的過程是建造零件的過程。由於建造零件的過程很複雜,因此,這些零件的建造過程往往被“外部化”到另一個稱做建造者的對象裡,建造者對象返還給用戶端的是一個全部零件都建造完畢的產品對象。
  建造模式利用一個導演者對象和具體建造者對象一個個地建造出所有的零件,從而建造出完整的產品對象。建造者模式將產品的結構和產品的零件的建造過程對用戶端隱藏起來,把對建造過程進行指揮的責任和具體建造者零件的責任分割開來,達到責任劃分和封裝的目的。
  構造者模式的結構:
  
抽象建造者(Builder)角色:給 出一個抽象介面,以規範產品對象的各個組成成分的建造。一般而言,此介面獨立於應用程式的商業邏輯。模式中直接建立產品對象的是具體建造者 (ConcreteBuilder)角色。具體建造者類必須實現這個介面所要求的兩種方法:一種是建造方法(buildPart1和 buildPart2),另一種是返還結構方法(retrieveResult)。一般來說,產品所包含的零件數目與建造方法的數目相符。換言之,有多少 零件,就有多少相應的建造方法。
具體建造者(ConcreteBuilder)角色:擔任這個角色的是與應用程式緊密相關的一些類,它們在應用程式調用下建立產品的執行個體。這個角色要完成的任務包括:1.實現抽象建造者Builder所聲明的介面,給出一步一步地完成建立產品執行個體的操作。2.在建造過程完成後,提供產品的執行個體。
導演者(Director)角色:擔任這個角色的類調用具體建造者角色以建立產品對象。應當指出的是,導演者角色並沒有產品類的具體知識,真正擁有產品類的具體知識的是具體建造者角色。
產品(Product)角色:產品便是建造中的複雜物件。一般來說,一個系統中會有多於一個的產品類,而且這些產品類並不一定有共同的介面,而完全可以是不相關聯的。
導演者角色是與用戶端打交道的角色。導演者將用戶端建立產品的請求劃分為對各個零件的建造請求,再將這些請求委派給具體建造者角色。具體建造者角色是做具體建造工作的,但是卻不為用戶端所知。
一般來說,每有一個產品類,就有一個相應的具體建造者類。這些產品應當有一樣數目的零件,而每有一個零件就相應地在所有的建造者角色裡有一個建造方法。
代碼如下:

public class ConcreteBuilder implements Builder{    private Product product = new Product();    /**     * 產品零件構造方法1     */    public void builderPart1() {        System.out.println("構建第一個零件");        product.setPart1("id:123");    }    /**     * 產品零件構造方法2     */    public void builderPart2() {        System.out.println("構建第二個零件");        product.setPart2("名稱:變形金剛");    }    /**     * 產品返還方法     */    public Product retrieveResult() {        return product;    }}
public class Director {    /**     * 持有當前使用的構造器對象     */    private Builder builder;    public Director(Builder builder) {        super();        this.builder = builder;    }    public void construct(){        builder.builderPart1();        builder.builderPart2();    }}
public static void main(String[] args) {        Builder builder = new ConcreteBuilder();        Director director = new Director(builder);        director.construct();        Product product = builder.retrieveResult();        System.out.println(product.getPart1()+" "+product.getPart2());    }

Java設計模式——構造者模式(Builder)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.