我與C 設計模式(三) 建造者Builder

2021-06-26 01:51:56 字數 1215 閱讀 2430

builder的定義就是:將乙個複雜物件的構建於它的表示分離,使得同樣的構建過程可以建立不同的表示。我想說構建我懂,表示?什麼意思?我的理解是將物件的構建過程和構建出來的結果分離,在之前,你怎麼寫構造基本就決定了物件的樣子,呼叫不同的構造語句即可得到不同的物件,而我們希望用幾乎一樣構造語句建立出不同的物件,只是通過傳遞不同的引數即可完成。分離構建與表示的關鍵在於,抽象出構建過程,將物件的構建固定成幾個步驟,就像流水線,乙個環節跟著乙個環節,比如說飲料都是上瓶子,裝水,蓋上蓋子,貼標籤,但是對於可樂和雪碧他們的瓶子不一樣,蓋子不一樣,內容不一樣,標籤也不一樣,但都是這四步流程。這是乙個內部的小封裝處理。builder的思路就很類似了。

對於乙個產品product,有a、b、c三個屬性,builder是product的建造者,有點工廠的味道,在builder中,我們把a、b、c的構建封裝起來,但如果僅僅是這樣,那每增加乙個類,都得建乙個對應的builder,多型啊,當然要對builder進行一次多型處理,建立乙個abstractbuilder,這樣用乙個abstractbuilder指標就可以了。可是如果要在每次建立之後分別進行各種屬性設定,還是比較繁瑣。我們需要用乙個東西將所有的屬性設定函式封裝起來完成,新增乙個操作封裝類,director,這個類就是組裝產品步驟的,就是設計流水線。對於客戶端來說,只需要對director呼叫操作就行了,哎,我是對著uml圖來寫的,你要是看暈了,建議在對著uml圖再看一遍:

圖**於這兒。

圖中顯示,product定義了乙個類,其建構函式並沒有幹多少實際的事情,就只是建了乙個空殼,而真正的流水線是在builder中完成,對於product所對應的builder有所有的流水工序,而最終完成是靠乙個direct類,direct類中有abstractbuilder指標,這樣就能隨意呼叫了,那麼最後builder模式呈現的效果是,對每一種相同工序的product都可以定義乙個對應的builder類,最後用direct為介面,通過abstractbuilder指標完成所有流水線加工。

對比builder模式和abstract factory模式,前者是對相同構建工序的產品(比如可樂和雪碧)進行乙個抽象封裝,後者是將相同族群的產品(構建過程不要求,比如windows和linux)進行抽象。共同之處都是針對物件的建立下功夫,工廠是將建立搬到工廠中,用乙個抽象工廠指標搞定,builder是將建立搬到builder中並且打散,汆成多步,用乙個direct統一呼叫。

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

1.建造者模式的作用 1.分離了物件子元件的構建和裝配,構建由builder負責,裝配由director負責。從而可以構 造出複雜的物件。這個模式適用於 某個物件的構建過程複雜的情況下使用。2.由於實現了構建和裝配的解耦。不同的構建器,相同的裝配,也可以做出不同的物件 相同的構建器,不同的裝配順序也...

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

定義 建造者模式 builder 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。簡介 建造者模式 builder 是建立乙個複雜物件的建立型模式,將構建複雜物件的過程和它的部件解耦,使得構建過程和部件的表示分離開來。例如我們要diy乙個台式電腦電腦,我們找到diy商家,我...

設計模式(三)建造者模式(建立型)

定義 將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。使用場景 建立的產品有複雜的內部結構,且建立的產品有較多的共同點,其組成部分相似。隔離複雜物件的建立,使得相同的過程可以建立不同的產品。與抽象工廠的區別 在建造者模式裡,有個指導者,由指導者來管理創造者,使用者是與指導...