那麼如何理解這個建造者模式?
假設現在有乙個人的類,人的屬性有性別、名字、年齡。那麼當我們想建立乙個人並且賦予他具體的屬性,那麼我們一般需要分為三步
1.設定性別
2.設定名字
3.設定年齡
這三步可以理解為構造的過程框架(穩定),但是想要實現具體的屬性時,比如男性或者女性,具體的實現細節是變化的。
那麼我們就可以通過建造者模式實現
1.建立乙個抽象建造者,提供實現步驟的介面(穩定)
2.派生出具體的建造者,比如女性建造者、男性建造者。通過虛函式重寫,實現具體的實現細節(變化)
3.建立乙個指示器,實現具體的構建框架(穩定),需要將具體的建造者傳入指示器,建造者就會按照指示器的構造框架建立出對應的物件。
優點:
缺點:
核心:建造模式中,強調的是固定整體構建的演算法,而靈活擴充套件和切換部件的具體構造和產品裝配的方式
首先建立乙個 人的類,具體性別、名字、年齡等屬性
#ifndef _human_h
#define _human_h
#include
#include
using
namespace std;
//人類
class
human;~
human()
;void
set***
(string ***)
void
setname
(string name)
void
setage
(string age)
void
showinfo()
private
: string m_***;
string m_name;
string m_age;};
#endif
建造者類
#ifndef _builder_h
#define _builder_h
#include
"human.h"
class
human
;//抽象建造者類
class
humanbuilder
;virtual
void
builderset***()
=0;virtual
void
buildersetname()
=0;virtual
void
buildersetage()
=0; human*
gethuman()
protected
:humanbuilder()
; human* m_human;};
//女人建造者(具體)
class
womanbuilder
:public humanbuilder;~
womanbuilder()
;void
builderset***()
void
buildersetname()
void
buildersetage()
};//男人建造者(具體)
class
manbuilder
:public humanbuilder;~
manbuilder()
;void
builderset***()
void
buildersetname()
void
buildersetage()
};//指示器
class
humandirector};
#endif
主函式
#include
#include
"human.h"
#include
"builder.h"
using
namespace std;
intmain()
執行結果
C 設計模式 建造者模式
本文固定連線 using system using system.collections.generic using system.linq using system.text using system.threading.tasks public void show 抽象建造者類,確定產品有兩個部...
C 設計模式 建造者模式
ifndef builder h define builder h include 說明 乙個複雜物件的建立,其通常是由很多的子物件構成 建造者模式就提供了一種 封裝機制 來將各個物件的變化隔離開,最終,組合成複雜物件的過程是不會變的。定義 建造者模式 將乙個複雜的物件的構建與它的表示分離,使得同樣...
C 設計模式 建造者模式
建造者模式 在gof的 設計模式 可復用物件導向軟體的基礎 中是這樣說的 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。這句話,似懂非懂的。乙個複雜物件的建立,其通常是由很多的子物件構成 如果乙個物件能夠直接就建立好了,那麼也不會稱之為複雜物件。由於專案中需求的變化,這個...