生成器模式,也叫建造者模式。有人說後者是想強調該模式重點是強調建造過程,而不是生成。
個人比較認同,所以後文也叫建造者模式。
建造者模式,主要意圖是將物件的建造於他的表示分離。從而使得同樣的建造過程可以建造出不同的產品。
參與者有建造者,導演和具體的產品。
舉例說明,我們想生產電腦,電腦就是產品。宣告乙個類,叫builder,而具體的建造者,需要繼承自這個父類,並實現其構造方法,並最終返回構造後的產品。
這裡變化的部分就是,不同的建造者和構造過程。建造者可以通過繼承出新的類來實現擴充套件。
而建造過程,通過乙個director類來封裝。每個過程可以對應乙個新的導演。導演負責呼叫具體建造者對應的建造方法。並最終獲取其生產的產品。
/**
* @file test_builder.cpp
* @author itegel
* @date 2013/09/12 10:07:27
* @brief
* **/
#include #include using namespace std;
class computerbuilder
virtual ~computerbuilder(){}
virtual void buildbody(){
cout<<"no body!"m_computer_builder->buildscreen();
m_computer_builder->buildmouse();
m_computer_builder->buildkeybord();
cout<<"result:"pc builder working...
pc body built!
pc screen built!
pc mouse built!
pc keybord built!
result:
a pc with: a body; a screen; a mouse; a keybord;
ipad builder working...
ipad body built!
ipad screen built!
no mouse!
no keybord!
result:
an ipad with: a body; a screen;
該模式,主要是分離了具體組裝過程和每個過程的實現。適用於構造過程複雜,並且可以有多種建造方式的場景。建造過程和不同的建造方法很容易擴充套件。
缺點看起來是客戶端需要知道有哪些建造者和建造過程。由客戶端來選擇具體的導演類和建造者。如果客戶端不關注這些,那麼就不適用了。
跟抽象工廠的區別是,抽象工廠強調多個系列產品兌現搞得構造方式,而建造者強調構造乙個複雜物件的過程。
生成器(建造者)模式
意圖 將乙個複雜物件的構造與它的表示分離,使得同樣的構建過程可以建立不同的表示。情景 生產不同規格的電腦。規格一,規格二 關鍵點 product 具體產品 表示被構造的複雜物件。builder 抽象構建產品 為建立乙個產品物件的各種部件指定抽象介面。builderimpl 抽象構建的具體實現 實現b...
建造者模式(生成器模式)
1.將複雜的物件的構建與其表示分離,使同樣的構建過程可以有不同的表示 如下 父類抽象,採用模板方法模式,定義一系列演算法,抽象,定義一模板,由sequence 動態決定演算法是否執行 子類將繼承該類並實現3個演算法 abstract class design mode builder pattern...
設計模式 1 6建造者模式(生成器模式)
建造者模式 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程建立不同的表示。與工廠模式不同,建造者模式是在導向者的控制下一步一步構造產品的。建立者模式可以能更精細的控制構建過程,從而能更精細的控制所得產品的內部結構。對於客戶來說,只需知道導向者就可以了,通過導向者,客戶就能構造複雜的物件,而不...