建造者模式(Builder)

2022-09-01 14:18:23 字數 2612 閱讀 6918

builder模式又稱建造者模式或者生成器模式,是gof提出的23種設計模式之一。builder模式是一種物件建立型模式之一,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承和過載的方式,動態地建立具有復合屬性的物件。

物件的建立:builder模式是為物件的建立而設計的一種模式,建立的是乙個復合物件,被建立的物件為乙個具有復合屬性的復合物件。關注物件建立的各部分的建立過程,不同的工廠(這裡指builder生成器)對產品屬性有不同的建立方法。

builder pattern結構圖

builder模式的關鍵是其中的director物件並不直接返回物件,而是通過一步步(buildparta,buildpartb,buildpartc)來一步步進行物件的建立。當然這裡director可以提供乙個預設的返回物件的介面(即返回通用的複雜物件的建立,即不指定或者特定唯一指定buildpart中的引數)。

1)  builder :

為建立產品各個部分,同一抽象介面。 

2)  concretebuilder :    具體建立產品的各個部分,部分a,部分b,部分c。

3)  director :    構造乙個使用builder介面的物件。      

4)  product  :    表示被構造的複雜物件。

concretebuilder 建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。

適用場景

:當我們要建立的物件很複雜的時候(通常是由很多其他的物件組合而成),我們要要複雜物件的建立過程和這個物件的表示(展示)分離開來,這樣做的好處就是通過一步步的進行複雜物件的構建,由於在每一步的構造過程中可以引入引數,使得經過相同的步驟建立最後得到的物件的展示不一樣。

簡單實現**如下:

#include using

namespace

std;

//複雜物件的抽象類

class

house

void setwall(string wall)

void setwindow(string window)

string getdoor()

string getwall()

string getwindow()

private

:

string

m_door;

string

m_wall;

string

m_window;

};//

工程隊的抽象類

class

builder;//

負責建造公寓的工程隊的抽象

class flatbuilder : public

builder

virtual

void

buildwindow()

virtual

void

buildwall()

virtual

void

builddoor()

virtual house*gethouse()

private

: house *m_phouse;

};//

負責建造別墅的工程隊的抽象

class villabuilder : public

builder

virtual

void

buildwindow()

virtual

void

buildwall()

virtual

void

builddoor()

virtual house*gethouse()

private

: house *m_phouse;

};//

設計師(指揮者) 負責建造邏輯

//指揮建築隊幹具體的活

class

director

void

construct()

private

: builder *m_pbuild;

};int

main()

gof在《設計模式》一書中給出的關於

builder

模式的意

圖是非常容易理解、間接的:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示(在示例**中可以通過傳入不同的引數實現這一點)。

builder

模式和abstractfactory

模式在功能上很相似,因為都是用來建立大的複雜的物件,它們的區別是:

builder

模式強調的是一步步建立物件,並通過相同的建立過程可以獲得不同的結果物件,一般來說

builder

模式中物件不是直接返回的。而在

abstractfactory

模式中物件是直接返回的,

abstractfactory

模式強調的是為建立多個相互依賴的物件提供乙個同一的介面。

Builder 建造者模式

模式定義 builder模式很好地將乙個複雜物件的建立與該物件內部的各個部件的組裝分離開來。它和 abstract factory模式有相似的地方,但是abstract factory主要提供了乙個建立一些列相關或相互依賴的物件的介面,無需知道指定他們具體的類 生產者 而builder模式著重於部件...

建造者模式(Builder)

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

建造者模式(Builder)

4 建造者模式 builder 工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 建造者類如下 抽象產品類,使用了模板方法模式,不同產...