定義(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中文網其他相關文章!