設計模式學習系列7 建造者模式

2022-03-06 02:46:15 字數 2856 閱讀 8967

概述

建造者模式,又稱生成器模式,將產品內部的表象與產品的生成過程分離,從而可以使用同樣的過程或者方法來建造具有不同內部表象的產品物件。使用builder模式後,使用者只用指定建造的型別就可以獲得他們,而具體的建造過程和細節就不想需要知道了。這裡引用另外乙個可能比較具體的描述:」在軟體系統中,有時候面臨著「乙個複雜物件」的建立工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的演算法確相對穩定。如何應對這種變化?如何提供一種「封裝機制」來隔離出「複雜物件的各個部分」的變化,從而保持系統中的 「穩定構建演算法」不隨著需求改變而改變?這就是要說的建造者模式。「

模型

director:指揮者,構建乙個使用bulider介面的物件

bulider:建立product物件的基類

product:具體的產品物件,表示被構造的複雜物件。實現builder的介面以構造和裝配該產品的各個部件,定義並明確它所建立的表示,並 提供乙個檢索產品的介面。

concreatebulider:具體的建造者,concretebuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。

模式完整的c++**例項

#include #includeusing

namespace std;

class product

void show()

}};

//抽象建造類

class bulider

;//第一種建造類 也就是一種產品

class bulidera:public bulider

~bulidera()

void create()

void bulidparta()

void bulidpartb()

product* getresult()

}; //第二種建造類 也就是另外一種產品

class buliderb:public bulider

~buliderb()

void create()

void bulidparta()

void bulidpartb()

product* getresult()

}; //director部分

class director

director(bulider *_b)

void ctreate()

}; int main()

bulider模式簡化版本省略抽象建造者角色系統中只需要乙個具體建造者,省略掉抽象建造者,結構圖如下:

省略指導者角色

抽象建造者角色已經被省略掉,還可以省略掉指導者角色。讓builder角色自己扮演指導者與建造者雙重角色。結構圖如下:

合併建造者角色和產品角色

建造模式失去抽象建造者角色和指導者角色後,可以進一步退化,從而失去具體建造者角色,此時具體建造者角色和產品角色合併,從而使得產品自己就是自己的建造者。這樣做混淆了物件的建造者和物件本身,但是有時候乙個產品物件有著固定的幾個零件,而且永遠只有這幾個零件,此時將產品類和建造類合併,可以使系統簡單易讀。結構圖如下:

實現要點

1、建造者模式主要用於「分步驟構建乙個複雜的物件」,在這其中「分步驟」是乙個穩定的演算法,而複雜物件的各個部分則經常變化。

2、產品不需要抽象類,特別是由於建立物件的演算法複雜而導致使用此模式的情況下或者此模式應用於產品的生成過程,其最終結果可能差異很大,不大可能提煉出乙個抽象產品類。

3、建立者中的建立子部件的介面方法不是抽象方法而是空方法,不進行任何操作,具體的建立者只需要覆蓋需要的方法就可以,但是這也不是絕對的,特別是類似文字轉換這種情況下,預設的方法將輸入原封不動的輸出是合理的預設操作。

4、前面我們說過的抽象工廠模式(abtract factory)解決「系列物件」的需求變化,builder模式解決「物件部分」的需求變化,建造者模式常和組合模式(composite pattern)結合使用。

效果

1、建造者模式的使用使得產品的內部表象可以獨立的變化。使用建造者模式可以使客戶端不必知道產品內部組成的細節。

2、每乙個builder都相對獨立,而與其它的builder無關。

3、可使對構造過程更加精細控制。

4、將構建**和表示**分開。

5、建造者模式的缺點在於難於應付「分步驟構建演算法」的需求變動。

適用性

以下情況應當使用建造者模式:

1、需要生成的產品物件有複雜的內部結構。

2、需要生成的產品物件的屬性相互依賴,建造者模式可以強迫生成順序。

3、 在物件建立過程中會使用到系統中的一些其它物件,這些物件在產品物件的建立過程中不易得到

細雨淅淅 標籤: 設計模式

設計模式學習筆記(7) 建造者模式

本人做的設計模式學習筆記系列的博文旨在用於個人學習之用,主要記載自己對設計模式的理解及 的實現 在建造者模式中,主要的角色有指揮者 抽象建造者類 具體建造者類和產品角色,建造者模式主要為構建多個組成元素相近,包含很多屬性和方法的複雜結構物件提供建造的模板,並且由指揮者指揮建造的流程。以下給出 複雜產...

PHP設計模式系列 建造者模式

有乙個使用者的userinfo類,建立這個類,需要建立使用者的姓名,年齡,金錢等資訊,才能獲得使用者具體的資訊結果。建立乙個userinfobuilder 使用者建造者類,這個類,將userinfo複雜的建立姓名,年齡,金錢等操作封裝起來,簡化使用者類的建立過程 建造者模式,目的是消除其它物件複雜的...

PHP設計模式系列 建造者模式

建造者模式主要是為了消除其它物件複雜的建立過程。有乙個使用者的userinfo類,建立這個類,需要建立使用者的姓名,年齡,金錢等資訊,才能獲得使用者具體的資訊結果。建立乙個userinfobuilder 使用者建造者類,這個類,將userinfo複雜的建立姓名,年齡,金錢等操作封裝起來,簡化使用者類...