設計模式系列
將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
—— 為建立乙個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...
建造者模式,即生成器模式
解釋 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不用的表示。結構圖 優點 可以將乙個產品的內部表象與產品的生成過程分割開來,從而可以使乙個建造過程生成具有不同的內部表象的產品物件。使得建造 與表示 分離,由於建造者隱藏了該產品是如何組裝的,所以如需要改變乙個產品的內部,只需要再定...