模式動機:乙個物件由若干部件組成,而組合這些部件的過程比較複雜,因此可以把這個組合工作交給建造者來完成,建造這返回給客戶的是乙個組裝好的物件。
模式定義(builder pattern):將乙個複雜物件的構建與表示分離開來,使得同樣的構建過程可以建立不同的表示形式。
模式結構圖:
其中包含抽象建造者builder、具體建造者concretebuilder、指揮者director、產品product。該模式中引入了director,負責控制產品的生產及其與使用者的隔離工作。director針對抽象建造者builder程式設計,客戶只要知道具體建造者concretebuilder的型別就能得到乙個完整的產品。
模式**:
bt_建造者模式.h:
#ifndef bp_h
#define bp_h
#include using namespace std;
/* 產品類
*/class product
void seta(const string& a)
const string& getb() const
void setb(const string& b)
const string& getc() const
void setc(const string& c)
private:
string parta;
string partb;
string partc;
};/*
抽象建造者類
*/class builder
; virtual void buildparta() = 0;
virtual void buildpartb() = 0;
virtual void buildpartc() = 0;
virtual product* getresult() = 0;
};/*
具體建造者類
*/class concretebuilder : public builder
virtual void buildparta()
virtual void buildpartb()
virtual void buildpartc()
virtual product* getresult()
private:
product* product;
};/*
指揮者類
*/class director
product* construct()
private:
builder* builder;
};#endif // bp_h
bt_建造者模式.cpp:
#include "bt_建造者模式.h"
#include using namespace std;
int main()
模式優缺點:使用不同的具體建造者,使用者可以得到不同的具體物件;增加新的建造者無需修改抽象類即可更改建造方式,因此,對於產品內部組成部分不變的情況下,可以很容易實現花樣建造,符合「開閉原則」; 但是如果產品內部發生變化,那麼就必須修改建造者。 建立型模式(4) 建造者模式
肯德基做漢堡的過程都是有嚴格的規範的,不管是麥香雞腿堡還是紐奧良烤雞腿堡,他們的製作步驟都是有嚴格規定,做漢堡的人既不能多做一步,也不能少做一步。對於不同的漢堡來說,雖然每一步加的料所有不同,但做漢堡的步驟都是一樣的。因為有了對做漢堡過程的嚴格控制,因而全國所有的肯德基店做出來的漢堡味道都是一樣的。...
建立型模式 建造者模式
建造者模式 builder pattern 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。與抽象工廠的區別 在建造者模式裡,有個指導者,由指導者來管理建造者,使用者和指導聯絡,指導者聯絡建造者最後得到產品牌。即建造模式可以強制實現一種分步驟進行的建造過程。建造者模式將複雜...
建立型模式 建造者模式
這段時間剛好要觀摩持久層框架mybatis,恰好看到mybatis 複雜的工廠物件 sqlsessionfactory 的生成類 sqlsessionfactorybuilder 不禁想起gof 23種設計模式中的建造者模式。對照現實中,你去買車時只需知道你要買車的型別,便可到店中購得心滿意足的產品...