在開始寫這個建造者模式的文章前,我也確實看了挺多次其他介紹這個模式的文章。感覺看了很多次才有一點對建造者模式明白透徹的感覺。細心想來,可能是介面的理解不好,平時工作比較少用到過建造者模式,所以理解的比較慢。所以看通了建造者模式,就可以加深自己對介面的理解。
那從例子開始,建造者模式就是要造東西嘛,造點啥呢?我腦海中曾經一頓掙扎,什麼,造汽車啊,大樓啊,電腦啊等等,後來發現還是簡單點造個人吧。這樣大家都好理解。讀者也可以理解造機械人。只要你喜歡。
那我們新建乙個人的類。
public
class
human
public
void
sethead
(string head)
public string getbody()
public
void
setbody
(string body)
public string gethand()
public
void
sethand
(string hand)
public string getfoot()
public
void
setfoot
(string foot)
}
這個就是人的類了,我們取名為human。只要是人都是這個類出來的。
那我們想要造人的話,得有乙個標準吧? 來要造人的話得有乙個步驟吧?頭,身體,手,腳,那都得有。
所以我們先寫乙個介面。乙個定義了造人標準的介面。
public
inte***ce
ibuildhuman
看,乙個介面定義好了。有各種造部位的方法,最後給個createhuman方法給你返回乙個我們想要造的人。
現在,人的類和造人的標準我們都定義好了。那我們可以先造乙個人出來,先造乙個高智商的人吧。
public
class
smartmanbuilder
implements
ibuildhuman
@override
public
void
buildhead()
@override
public
void
buildbody()
@override
public
void
buildhand()
@override
public
void
buildfoot()
@override
public human createhuman()
}
這個高智商的造人過程自然是實現了ibuildhuman這個造人標準的介面了。然後就是set方法,最後返回造好的human。
好的,其實到這裡呢,我們已經完成了建造的過程。那就這麼簡單的建造過程,還搞了乙個建造模式嗎?非也。接下來,就是介紹建造者模式的精髓,那就是director。這個director呢,就是來執行我們剛才的造人動作的。沒錯,精髓就是我們剛才的造人動作。我們先看**:
public
class
director
}
這個director類呢,重點在於createhumanbydirecotr的引數是我們的造人標準的介面。這樣一來,只要是實現了我們的這個介面的類,就都可以作為引數,我們剛剛不是造了乙個高智商的人嗎?那我們如果想造乙個身體運動能力出色的人,也就是運動員,這個director也可以啟動這個造人過程,只要我們把這個運動員的類先寫好。我們來看看director是如何發揮的:
public
class
buildertest
}
輸出結果為:
智商180的頭腦
新的身體
新的手新的腳
看,createhumanbydirecotr這個方法帶的引數就是我們高智商人的那個類。那我們想造乙個運動員,就可以像高智商人那樣建好類,然後傳進來就可以了! 建造者模式
1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...
建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
建造者模式
建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...