設計模式系列
將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
—— 為建立乙個product物件的各個部件指定抽象介面
—— 實現builder的介面以構造和裝配該產品的各個部件
—— 定義並明確它所建立的表示
—— 提供乙個檢索產品的介面
—— 構造乙個可以使用builder介面的物件
—— 表示被構造的複雜物件。concretebuilder建立該產品的內部表示並定義它的裝配過程
—— 包含定義組成部件的類,包含將這些部件裝配成最終產品的介面
下面的互動圖說明了builder和director是如何與乙個客戶協作的
它使你可以改變乙個產品的內部表示
它將構造**和表示**分開
它使你可對構造過程進行更精細的控制
優點:生成器模式最核心的就是分離其構造過程和組成部分,實現兩者的松耦合
細節隱藏,產品的組成部分的構建和產品的構建分別由 builder 和 director 來負責,使用者只需要使用兩者就可以生成最終的產品
更好的復用,產品的構建流程可以復用,組成部分也可以復用。
缺點:更複雜,理解難度更高
類增多abstract factory與builder相似,因為它也可以建立複雜物件。主要的區別是builder模式著重於一步步構造乙個複雜物件。而abstract factory著重於多個系列的產品物件(簡單的或是複雜的), builder在最後的一步返回產品,而對於abstract factory來說,產品是立即返回的。
composite (4.3)通常是用builder生成的。
以銀行賬單為例,賬單由抬頭、賬單內容(多條資料)、結尾,三個部分組成。賬單組成部分是固定的(抬頭、交易記錄、結尾)三大部分組成,但賬單的格式可以用多種可以用txt格式、也可以用xml格式。
執行結果:#include #include #include #include using namespace std;
templatestring converttostring(t value)
class exportheadermodel
string getdepid()
string getexportdate()
private:
string m_strdepid;//對賬單的部門id
string m_strexportdate;//對賬單的匯出日期
};class exportdatamodel
string gettransid()
double getquantity()
private:
string m_strtransid;//交易id
double m_quantity;
};class exportfootermodel
string getexportuser()
private:
string m_exportuser;
};class builder
};class txtbuilder : public builder
}void builderfoot(exportfootermodel & efm)
string getresult()
public:
txtbuilder()
private:
string m_strresulst;
};class xmlbuilder : public builder
void builderbody(vector < exportdatamodel*> & edmcollection)
}void builderfoot(exportfootermodel & efm)
string getresult()
public:
xmlbuilder()
private:
string m_strresulst;
};class director
void construct(exportheadermodel& ehm, vector < exportdatamodel*>& edmcollection, exportfootermodel& efm)
private:
builder* m_pbuilder;
};int main(void)

設計模式系列
建造者模式(生成器模式)
1.將複雜的物件的構建與其表示分離,使同樣的構建過程可以有不同的表示 如下 父類抽象,採用模板方法模式,定義一系列演算法,抽象,定義一模板,由sequence 動態決定演算法是否執行 子類將繼承該類並實現3個演算法 abstract class design mode builder pattern...
生成器(建造者)模式
意圖 將乙個複雜物件的構造與它的表示分離,使得同樣的構建過程可以建立不同的表示。情景 生產不同規格的電腦。規格一,規格二 關鍵點 product 具體產品 表示被構造的複雜物件。builder 抽象構建產品 為建立乙個產品物件的各種部件指定抽象介面。builderimpl 抽象構建的具體實現 實現b...
建造者模式,即生成器模式
解釋 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不用的表示。結構圖 優點 可以將乙個產品的內部表象與產品的生成過程分割開來,從而可以使乙個建造過程生成具有不同的內部表象的產品物件。使得建造 與表示 分離,由於建造者隱藏了該產品是如何組裝的,所以如需要改變乙個產品的內部,只需要再定...