設計模式(4) Builder 建造者(構建器)

2021-07-09 17:23:04 字數 1379 閱讀 8817

builder和工廠模式一樣,都是建立物件型別的模式。同樣是建立型別的模式,其區別在於:builder是應用於更為複雜的物件建立過程。舉例說明:生產一輛玩具車,乙個工廠乙個方法就搞定了。而要生產一輛汽車,那部件太多了,部件不能少,且把所有這些部件組裝在一起,也要有一套非常繁瑣的流程和順序。

這個時候,工廠模式中的工廠介面,就不是只寫乙個建立產品的抽象方法就夠了。你必須考慮到使這個介面裡具備一系列必不可少的方法,有了這些方法才能夠滿足生成完整產品的需要。而工廠實現類,必須實現介面中的一部分相關聯的方法,才能創造出完整的產品(這一步很關鍵,工廠介面不能遺漏部件,要做到最普遍意義上的抽象,因為呼叫工廠時只使用介面型別去呼叫其中的方法。這在大話設計模式裡,有乙個很讚的說法:依賴倒轉原則–抽象不應該依賴於細節,細節應該依賴於抽象)。同時,你還應該考慮建立乙個類,專門來控制繁瑣的流程,合理的呼叫工廠實現類中一系列方法生產出來的部件,拼出最終的產品。這就是builder模式。

從這個意義上說,也不用太去糾結工廠和builder的區別,還是那句話,理解精髓,使用時就水到渠成。如果你遇到複雜物件的建立,覺得應該封裝,那就使用工廠。如果你發現物件極其複雜,那你就會覺得合理的方式是把每個部件的建立封裝,並且應該制定規範保證不會遺漏部件。最後還需要乙個總控類來負責完整產品的裝配,你就自然的在使用builder模式了。

builder模式的要點:

1.上面所說的總控類,即director,稱之為導演類。導演類負責呼叫builder提供的各類方法來完成最終的產品。

2.builder,類似於工廠介面,稱之為抽象建造者。這裡是實現細節依賴抽象的核心。所有的builder實現類,都必須實現builder抽象出的一部分相關聯的方法。才能實現完整的產品建立能力。

3.建造者,即builder的實現類。相當於工廠模式的工廠實現類。同樣是一種產品需要乙個建造者。但要注意的是:

a.不同的產品可能要用各自不同的一系列方法去建立。很多例子裡並沒有強調這一點,但是gof的舉例中確實是有乙個子類並沒有實現全部builder中的方法。

b.正因為a,所以builder中未必都是抽象方法需要concretbuilder去實現,而也有可能是空方法,只有需要用到的那個concretbuilder去重寫,但這依然是抽象的思維方式。

4.產品類,注意到產品並沒有抽象成介面,這也不是定死的。因為在建造者模式中,很可能不同的產品實現根本就沒有抽象出共性介面的可能。

至此總結一下:builder模式就像是乙個導演類,後面掛著乙個工廠模式。當然這裡的工廠很可能有一大堆建立方法,由導演類來負責總控和裝配,從而實現物件的建立。所以,這是乙個複雜物件適用的建立模式。

設計模式 4 建造者模式(Builder)

4 建造者模式 builder 工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性。建造者模式主要用於 分步驟構建乙個複雜的物件 在這其中 分步驟 是乙個穩定的演算法,而複雜物件的各個部分則經常變化。因此,建造者模...

Builder 建造者 設計模式

宣告 本博文篇幅短,適合快速回顧 朝花夕拾,不適合入門詳解。一 概念 將複雜物件的建造過程抽象出來 抽象類別 使這個抽象過程的不同實現方法可以構造出不同表現 屬性 的物件。二 模式結構圖 三 例子 四 優缺點 1 優點 a builder模式的封裝性好,易擴充套件 b 解耦了組裝過程和建立具體部件,...

設計模式 建造者模式(Builder)

將乙個複雜物件的構建於它的表示分離,使得同樣的構建過程可以建立不同的表示。並且因為構建過程是標準化的,所以當需要標準化構建過程時也可以使用。builder物件提供給導向器乙個構造產品的抽象介面。該介面使得生成器可以隱藏這個產品的表示和內部結構。它同時也隱藏了該產品是如何裝配的。因為產品是通過抽象介面...