首頁 > Java > java教程 > 設計模式之創建者模式詳解

設計模式之創建者模式詳解

零下一度
發布: 2017-06-23 09:34:31
原創
1482 人瀏覽過

定義(From百度百科):
       其核心思想是將一個「複雜物件的建構演算法」與它的「元件及組裝方式」分離,使得構件演算法與組裝方式可以獨立因應變化;
       重複使用相同的建構演算法可以創造不同的表示,不同的建構過程可以重複使用相同的元件組裝方式

UML類別圖

       

特定程式碼:

public class Client {public static void main(String[] args) {
        Director d = new Director(new ConcreteBuilder());
        d.construct();
    }
}public class Director {
    Builder builder;

    Director(Builder builder){this.builder = builder;
    }void construct(){
        builder.buildPart();
    }
}public class ConcreteBuilder implements Builder {private Product product;public Product getResult() {return product;
    }

    @Overridepublic void buildPart() {

    }
}public class Product {

}
登入後複製

舉例:








一輛車是由很多部件組成的,有大到發動機,小到後視鏡等等部分組成,如果說組裝一個汽車交給用戶那顯然是不現實的,

畢竟用戶想要的只是一個汽車,你怎麼造,他不關心。

比如說我想要個奧迪,那說到上面的例子,我就告訴Director,我要建構個奧迪。
那Director找到奧迪對應的Builder接口(ConcreteBuilder實例), ConcreteBuilder知道造奧迪的各個部分和步驟,
比如先造個大架子,在選個發動機,在選個合適的輪胎,最後按個後視鏡,這些步驟就是buildPart的過程,總之很複雜過程,
但對使用者來說就是奧迪,才不關心這些複雜的過程。
還有說一下這個例子看起來跟抽象工廠很像,但是有一個重要的區別,工廠只負責生產出這個車的各個部件,並不負責組裝。
這是區分兩種模式很重要的部分。

各部分組成:

Builder:給出一個抽象接口,以規範產品物件的各個組成成分的建造。這個介面規定要實現複雜物件的哪些部分的創建,並不涉及具體的物件部件的創建。
對應上面的例子就是造車的各部份架子引擎等等的組成。
ConcreteBuilder:實作Builder接口,針對不同的商業邏輯,具體化複雜物件的各部分的創建。 在建造過程完成後,提供產品的實例。
對應上面的就是組裝奧迪的Builder,一步步加上發農機輪子...
Director:調用具體建造者來創建複雜對象的各個部分,在指導者中不涉及具體產品的信息,只負責確保物件各部分完整創建或以某種順序創建。
Director這個字的意思是導演,職責也很明確就是調度。上面的例子我如果作為出品人想法是要奧迪,導演通知ConcreteBuilder去做。
Product:要建立的複雜物件。
對應上面的就是奧迪。

優缺點:

優點:###        鬆散耦合:將複雜產品的創建步驟分解在不同的方法中,使得創建過程更加清晰,使得我們能夠更精確的控制複雜物件的產生過程。 ###        更好的多工性:建構產品和組裝拆分,使得建構產品可以重複使用。 ######缺點:###        建造者模式所創造的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式,因此其使用範圍受到一定的限制。 ###        如果產品的內部變化複雜,可能會導致需要定義許多特定建造者類別來實現這種變化,導致系統變得龐大。 ######參考:###  ######

以上是設計模式之創建者模式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板