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

2021-06-27 23:58:55 字數 1445 閱讀 7178

最近在看設計模式,看到了建造者模式(builder),這是我的第一篇設計模式部落格文章,之前看過一些經典模式,沒有記錄下來,以後會相應的將補充一些博文。我們直接進入正題。

我想,關於建造者模式的書面定義,大家在不同的書本中肯定會得到標準的官方定義,借用程杰老師的《大話設計模式》當中的定義:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。oh,我的天,我想大家第一次看到這種定義已經會瘋掉的,到底這句話表示什麼意思啊,讓我們來分析分析。

1、複雜物件:通俗的說,就是乙個物件的各個部分由一定的演算法構成,這些演算法的實現方式不相同。這些實現方式會隨著外部因素的不同而發生劇烈的變化,也就是說,物件的構造很複雜,要應對客戶端的不同變化。

2、表示:說白了就是物件的實現啦。我們可以從概念中理解到,表示(實現)是多樣的。

3、物件的構建:就是將乙個物件的各個子部分結合起來的過程。物件子部分的實現各有不同,但是其構建順序卻相對穩定。

下面我們根據我們上面三點分析,舉個簡單的例子來說明一下。

比如,我們要畫一人,第一,從常識我們知道,人由頭,手,腳,軀幹組成,我們畫乙個人的時候,這四個部分是必須的(總不能畫個殘疾人出來吧,呵呵),這就是人(物件)的構建;第二,人也是不同的嘛,有高矮胖瘦之分,所以畫人的時候,組**的四個部分的長短大小因人而異,這就是概念中說的不同的表示(實現)。好了,我們通俗的理解了一下構造模式的概念,下面我們來真正的剖析一下建造者模式:

類圖:

直接從網上搞了一張圖,謝謝畫圖的博主。

導演類director:直接和客戶端打交道的類,首先其有有乙個函式construct,呼叫concretebuilder類的函式來構造產品,所以construct函式要傳入乙個builder物件。

建造者類builder:所以具體生成產品的基類,該類封裝了組成(構建)產品的標準流程,子類繼承它後,就不會構造殘缺的物件了(意思就是不會產生有殘疾的人)。

具體建造者類concretebuilder:具體承擔產生產品的類

產品類porduct:產品類。由多個部件組成

好了,下面用**來具體實現以下建造者模式(c++):

class productor

void show()}};

class builder

;class concretebuilder1:public builder

void buildpartb()

productor getresult()

};class concretebuilder2:public builder

void buildpartb()

productor getresult()

};class director

};int main()

//上述代買摘抄於《大話設計模式》

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

前面介紹過工廠模式了,如果我們需要一輛車並不需要知道車是如何 從哪個工廠裡生產出來的。今天介紹的建造者模式就要說明一下車子是如何製造的。一輛汽車需要不同的原件進行組裝而成的。class tyre class seat class car 工廠裡的工人們知道如何製造車子的輪胎 方向盤 底盤 發動機等等...

設計模式之建造者模式 Builder

建造者模式 優點 1.隔離了構建的步驟和具體的實現,為產品的具體實現提供了靈活性 2.封裝和抽象了每個步驟的實現,實現了依賴倒置原則 3.封裝了具體的步驟,減少了 冗餘 缺點 1.要求構建的產品不能劇烈變化 示例 builer.h ifndef bulider h define bulider h ...

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

工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。還和前面一樣,乙個sender介面,兩個實現類mailsender和smssender。最後,建...