C 中的Builder模式

2021-09-11 06:37:03 字數 1929 閱讀 2694

設計模式中的builder模式,又叫建造者模式,是一種常用的模式,它主要的作用是分離乙個複雜物件的構建過程和複雜物件的表現形式,抽象出構建過程,這樣可以使用相同的構建過程,配合依賴注入構建出不用的產品。

其中有兩點需要注意。

乙個例子

考慮一下乙個例子,我們創造乙個房子,當然,房子有很多種,有別墅,平房,樓房等,但是抽象的看來,每個房子都需要一下幾個步驟

而乙個房子大概也需要如下屬性

這樣,我們試著來抽象出房子(在這裡是我們的product)和建造者介面。

public

class

house

public

house

(string type)

}

很簡單的乙個類,僅僅乙個屬性,接著是建立者介面。

inte***ce

ihousebuilder

很簡單,對吧?

接著我們試著來創造兩個具體的建立者,分別建立平房和樓房。

class

pinghousebuilder

:ihousebuilder

public

void

createroom()

public

void

createwall()

public

void

createwindow()

public

house

gethouse()

}class

louhousebuilder

:ihousebuilder

public

void

createroom()

public

void

createwall()

public

void

createwindow()

public

house

gethouse()

}

這是兩個相當簡單的建立者,通過一些輸出顯示一些步驟的執行,現實生活中肯定不會那麼簡單,但是用作示例**足夠了,接下來是我們的director。

class

director

public

void

construct()

}

從上面看出,通過construct方法,固定得呼叫builder裡面的各個步驟。最後看看客戶**。

ihousebuilder builder =

newpinghousebuilder()

;director director =

newdirector

(builder)

;director.

construct()

;var house = builder.

getresult()

;

在上面的**中,客戶**負責建立builder例項,例項化director,呼叫construct,最後通過builder得到建立出來的結果。

如果需要建立不同的house,只需要用替換director裡面的builder即可,其他步驟都可以保持不動,這樣就實現了解耦。

和templatemethod模式的比較

乍一看,builder模式和templatemethod模式比較相似,都是固定了某些子步驟,方便客戶**能夠以固定的順序或者邏輯來使用子步驟,同時兩種模式都能方便再定義子步驟。

但它們之間也有一些區別,主要在於兩點。

綜上,在選擇這兩種模式的時候,要綜合考慮使用的場景再做出決定。

c 設計模式 Builder

動機 在軟體系統中,有時候面臨著 乙個複雜物件 的建立工作,其通常由各個部分的子物件用一定的演算法構成 由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的演算法卻相對穩定。如何應對這種變化?如何提供一種 封裝機制 來隔離出 複雜物件的各個部分 的變化,從而保持系統中的...

C 模式設計之Builder

c 模式設計之builder 2002 07 30 com集中營 一 功能 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。二 結構圖 各類之間的互動關係如下圖所示 三 示例 namespace designpattern builder class product2 cl...

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

通過 物件建立 模式繞開new,來避免物件建立 new 過程中所導致的緊耦合 依賴具體類 從而支援物件建立的穩定。它是介面抽象之後的第一步工作。將乙個複雜物件的構建與其表示相分離,使得同樣的構建過程 穩定 可以建立不同的表示 變化 includeclass house class housebuil...