建造者模式也叫生成器模式,是由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個部分,頭部 身體 左右手 左右腳。與工廠模式不同,建造者模式是在導向者的控制下一步一步構造產品的。建造小人就是在控制下一步步構造出來的。建立者模式可以能...
建立者模式
意圖 將乙個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。下面會發現模式實現方式與策略模式,橋接模式等都是相似的,唯有意圖不同而已.此為建立者模式 建立者模式在平時生活中很常見,如肯德基的 可樂可以跟很多東西組合成乙個 而你向服務員要的就是乙個 服務員就把不同東西組合在一起成了乙個...