故事背景:好菜每回味不同?
將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
乙個複雜物件是由多個部件組成的,建造者模式是把複雜物件的建立和部件的建立分別開來,分別用builder類和director類來表示。
用director構建最後的複雜物件,而在上面builder介面中封裝的是如何建立乙個個部件(複雜物件是由這些部件組成的),也就是說,director負責如何將部件最後組裝成產品。
這樣建造者模式就讓設計和實現解耦了。剛開始接觸建造者模式的時候,最容易把建造者和抽象工廠模式混淆了。
由於而這都屬於建立型的設計模式,所以二者之間是有公共點的,但是建造者模式注重於物件組合,即不同的小物件組成乙個整體的複雜大物件,而抽象工廠模式針對於介面程式設計,只是對外提供建立物件的工廠介面,不負責物件之後的處理。
product產品類,通過模板方法模式實現,有基本方法和模板方法
builder抽象建造者,規範產品的元件,一般由子類實現
concretebuilder具體建造者,實現抽象類定義的所有方法,並返回乙個建立好的物件
director導演類,負責安排已有模組的順序,然後告訴建造者開始建造
class product;優點:封裝性class builder;
class concretebuilder:public builder
;class director
protected:
private:
builder* _bld;
};
建造者獨立,容易擴充套件--》就是這個所謂不同的順序的具體描述了
便於控制細節風險,細節問題封裝在建造者中,所以互不影響
使用場景:
相同方法,不同順序
多個部件可以組裝,但是產生的結果不同時
產品類非常複雜或者呼叫順序不同,產生的功能不同
物件建立過程中會使用到的系統中的其他物件時,這些物件在產品物件的建立過程不易得到時,可以採用建造者模式瘋長該物件的建立過程。這是乙個補償方法。
注意事項:
建造者模式關注的是零件型別和裝配工藝(順序),這是他和工廠模式最大的不同。模板方法側重子類控制父類
在建造者模式中使用模板方法。就是前面已經用過的
建造者模式最主要的功能是基本方法的呼叫順序安排,組裝已有零件;而工廠模式則是造輪子。
設計模式 建造者模式
在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...
設計模式建造者模式
今天看了乙個設計模式。總結下,以免忘了。如何引入建造者模式的呢?作者舉了個例子。建造小人。當然需要 頭,左手,右手,左腳,右腳,軀幹。建造的過程使用 使用類裡面的方法就行了。但是如果需要乙個胖的小人,乙個瘦的小人呢?就需要重新構造乙個胖人類,乙個瘦人類。當然 使用者還需要自己處理構造的過程。這樣 就...
設計模式 建造者模式
定義 將乙個複雜的物件的構建與它的表示分離,是的同樣的構建過程可以建立不同的表示。包括的要素 1 產品類 2 抽象建造者或者介面 3 建造者 4 導演類 建造者模式的優點 首先,建造者模式的封裝很好,使用建造者模式可以有效地封裝變化,注意在使用建造者模式的場景中,一般產品類和建造者介面是比較穩定的,...