(一)概念:
builder模式也叫建造者模式或者生成器模式,是由gof提出的23種設計模式中的一種。builder模式是一種物件建立型模式之一,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承和過載的方式,動態地建立具有復合屬性的物件。
物件的建立:builder模式是為物件的建立而設計的模式- 建立的是乙個復合物件:被建立的物件為乙個具有復合屬性的復合物件- 關注物件建立的各部分的建立過程:不同的工廠(這裡指builder生成器)對產品屬性有不同的建立方法
class a
(二)模式中包含的角色及其職責
1) builder:為建立產品各個部分,統一抽象介面。
2) concretebuilder:具體的建立產品的各個部分,部分a, 部分b,部分c。
3) director:構造乙個使用builder介面的物件。
4) product:表示被構造的複雜物件。
concretebuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。
(三)適用情況
乙個物件的構建比較複雜,將乙個物件的構建和物件的表示進行分離。
(四)建造者模式的實現
#include
using namespace std;
#include
class house
string getwall()
void setdoor(string door)
string getdoor()
void setwindows(string windows)
string getwindows()
private:
string m_wall;
string m_door;
string m_windows;
};class build
;// 建造別墅的工程隊
class buildvilla: public build
public:
void buidwall()
void buiddoor()
void buidwindows()
house *gethouse()
private:
house *house;
};// 建造普通房的工程隊
class buildcommonhouse: public build
public:
void buidwall()
void buiddoor()
void buidwindows()
house *gethouse()
private:
house *house;
};// 設計者,包工頭
class director
void construct()
house *gethouse()
private:
build *build;
};int main()
(五)建造者模式和工廠模式的區別
factory模式中:
1、有乙個抽象的工廠。
2、實現乙個具體的工廠---汽車工廠。
3、工廠生產汽車a,得到汽車產品a。
4、工廠生產汽車b,得到汽車產品b。
這樣做,實現了購買者和生產線的隔離。強調的是結果。
builder模式:
1、引擎工廠生產引擎產品,得到汽車部件a。
2、輪胎工廠生產輪子產品,得到汽車部件b。
3、底盤工廠生產車身產品,得到汽車部件c。
4、將這些部件放到一起,形成剛好能夠組裝成一輛汽車的整體。
5、將這個整體送到汽車組裝工廠,得到乙個汽車產品。
這樣做,目的是為了實現複雜物件生產線和其部件的解耦。強調的是過程
兩者的區別在於:
factory模式不考慮物件的組裝過程,而直接生成乙個我想要的物件。
builder模式先乙個個的建立物件的每乙個部件,再統一組裝成乙個物件。
factory模式所解決的問題是,工廠生產產品。
而builder模式所解決的問題是工廠控制產品生成器組裝各個部件的過程,然後從產品生成器中得到產品。
設計模式之建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟 設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設 計模式 和...
設計模式之建造者模式
建造者模式也叫生成器模式,是一種物件建立型模式,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承或過載的方式,動態的建立具有復合屬性的物件。應用場景 物件的建立 builder 模式是為物件的建立而設計的模式 建立的是乙個復合物件 被建立的物件為乙個具有復合屬性的復合物件 關...
設計模式之建造者模式
在做服務介面的時候,往往在業務處理之前需要做業務校驗,格式校驗等業務前處理。這些介面有個相同的特徵,就是必須經過這些處理步驟之後才能做核心的業務處理,拓展的服務介面也必須經過這些處理。基於這個特徵,我們就來分析一下設計模式中,建造者模式。我們先建乙個基礎的服務類 public abstract cl...