生成器模式(建造者模式 Builder)

2021-10-05 15:54:34 字數 2449 閱讀 3407

設計模式系列

將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

—— 為建立乙個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...

建造者模式,即生成器模式

解釋 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不用的表示。結構圖 優點 可以將乙個產品的內部表象與產品的生成過程分割開來,從而可以使乙個建造過程生成具有不同的內部表象的產品物件。使得建造 與表示 分離,由於建造者隱藏了該產品是如何組裝的,所以如需要改變乙個產品的內部,只需要再定...