建立者模式

2021-08-07 04:17:41 字數 2751 閱讀 4132

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

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

適用情況:

乙個物件的構建比較複雜,將乙個物件的構建(?)和物件的表示(?)進行分離。

物件的構建:物件進行各部件生產和組裝的過程,表現為具體工廠生產具體產品的函式。

物件的表示:變現為乙個具體的產品類。

角色及職責

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

concretebuilder:

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

director:

構造乙個使用builder介面的物件。扮演導演和總指揮的角色,指揮抽象工廠生產產品,而由於多型,抽象工廠實際使用的是具體工廠物件的構建方法。決定了各部件之間的生產和組裝邏輯!

product:

表示被構造的複雜物件。裡面有多個部件,需要在concretebuilder裡面單獨進行生產和組裝。

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

和工廠方法模式的區別

factory模式中:

1、有乙個抽象的工廠。

2、實現乙個具體的工廠—汽車工廠。

3、工廠生產汽車a,得到汽車產品a。

4、工廠生產汽車b,得到汽車產品b。

這樣做,實現了購買者和生產線的隔離。強調的是結果。

builder模式:

1、引擎工廠生產引擎產品,得到汽車部件a。

2、輪胎工廠生產輪子產品,得到汽車部件b。

3、底盤工廠生產車身產品,得到汽車部件c。

4、將這些部件放到一起,形成剛好能夠組裝成一輛汽車的整體。

5、將這個整體送到汽車組裝工廠,得到乙個汽車產品。

這樣做,目的是為了實現複雜物件生產線和其部件的解耦。強調的是過程

兩者的區別在於:

factory模式不考慮物件的組裝過程,而直接生成乙個我想要的物件。

builder模式先乙個個的建立物件的每乙個部件,再統一組裝成乙個物件。

factory模式所解決的問題是,工廠生產產品。

而builder模式所解決的問題是工廠控制產品生成器組裝各個部件的過程,然後從產品生成器中得到產品。builder模式不是很常用。

案例

#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

;/*物件的構建1--實現所有元件的構建功能--具體的構建者*/

class flatbuilder:public builder

virtual

void buildwall()

virtual

void builddoor()

virtual

void buildwindow()

virtual house* gethouse()

private:

house* m_house;

};/*物件的構建2--實現所有元件的構建功能--具體的構建者*/

class villabuilder:public builder

virtual

void buildwall()

virtual

void builddoor()

virtual

void buildwindow()

virtual house* gethouse()

private:

house* m_house;

};/*設計師--負責建造邏輯(物件如何構建,構建順序如何都與物件的表示無關)

* --指揮抽象的構建者--建築團隊

實現了物件的構建和物件的表示之間的解耦合(分離)*/

class director

void constructor()

private:

builder * m_build;

};/*測試案例*/

int main262()

建立者模式

當我們使用抽象工廠時,在客戶端進行呼叫的時候,如果產品的類別比較多,那麼此時工廠返回的例項物件將會很多。客戶端得 將會大大增加,這將不利於程式的可讀性。為了解決此類問題,可以把所有例項的建立放在乙個類中去生成,這樣在客戶端只需要呼叫這個建立者類,大大減少客戶端的 量。1,所有動物類的介面 packa...

建立者模式

建造者模式的定義將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 大話設計模式 舉了乙個很好的例子 建造小人,一共需建造6個部分,頭部 身體 左右手 左右腳。與工廠模式不同,建造者模式是在導向者的控制下一步一步構造產品的。建造小人就是在控制下一步步構造出來的。建立者模式可以能...

建立者模式

意圖 將乙個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。下面會發現模式實現方式與策略模式,橋接模式等都是相似的,唯有意圖不同而已.此為建立者模式 建立者模式在平時生活中很常見,如肯德基的 可樂可以跟很多東西組合成乙個 而你向服務員要的就是乙個 服務員就把不同東西組合在一起成了乙個...