設計模式之 建造者模式 Builder

2022-03-16 08:57:22 字數 2060 閱讀 3243

乙個人活到70歲以上,都會經歷這樣的幾個階段:嬰兒,少年,青年,中年,老年。並且每個人在各個階段肯定是不一樣的呀,我覺得可以說世界上不存在兩個人在人生的這5個階段的生活完全一樣,但是活到70歲以上的人,都經歷了這幾個階段是肯定的。實際上這是乙個比較經典的建造者模式的例子了。

1.初識建造者模式

建造者模式實際上是常用的設計模式。顧名思義,builder的意思是建造者或者建築工人,談到建造自然會想到樓房。樓房是千差萬別的,樓房的外形、層數、內部房間的數量、房間的裝飾等等都不一樣,但是對於建造者來說,抽象出來的建築流程是確定的,往往建築一座樓房包括下面的步驟:(1)打樁,建立基礎(2)建立框架等。建造者模式的本質和建造樓房是一致的:即流程不變,但每個流程實現的具體細節則是經常變化的。建造者模式的好處就是保證了流程不會變化,流程即不會增加、也不會遺漏或者產生流程次序錯誤,這是非常重要的。我們熟知的樓歪歪事件,官方的解釋就是由於先建立樓房後,再建設停車場造成的,這是典型的建造次序錯亂。(看來這些人兒不知道建造者模式啊!!!)

我生活的地方有乙個菜叫「鍋包肉」。基本每個餐館都有,但是每個餐館的味道都不一樣,原因是什麼呢?因為這道菜的作法沒有形成標準唄!每個人的作法都不一樣,所以味道就不一樣了。這實際上通過「建造者模式」讓每個館子的「鍋包肉」都一樣。同樣的kfc做出來的東西,不論是全國哪家店做出來就都乙個味,因為kfc內部有很嚴格的規定,做巨無霸有做巨無霸的流程,必須嚴格遵守,這樣做出來的東西當然一致了。kfc就是採用了建造者模式!!

說了這麼多,到底什麼是建造者模式呢?這麼神奇。看看gof怎麼說。

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

建造者模式通常包括下面幾個角色:

1. builder:給出乙個抽象介面,以規範產品物件的各個組成成分的建造。這個介面規定要實現複雜物件的哪些部分的建立,並不涉及具體的物件部件的建立。

2. concretebuilder:實現builder介面,針對不同的商業邏輯,具體化複雜物件的各部分的建立。 在建造過程完成後,提供產品的例項。

3. director:呼叫具體建造者來建立複雜物件的各個部分,在指導者中不涉及具體產品的資訊,只負責保證物件各部分完整建立或按某種順序建立。

4. product:要建立的複雜物件。

按照慣例,還是給出建造者模式的結構圖

2.乙個建造者模式例子實現

不妨就實現《大話設計模式》上的建造小人的例子吧!!在遊戲開發中建造小人是經常的事了,要求是:小人必須包括,頭,身體,手和腳。現在系統要包括的分為胖人和瘦人。寫出建造者模式的**如下:

view code

看過上面**發現使用建造者模式有什麼好處了嗎?上面的例子,通過建造者模式,使得建造過程通過director類的construct函式固定了,即建造過程不會變,也就是滿足上面要求中紅色字型的「必須包括」。但是具體的頭,身體,手腳這些身體的各個部分會變化,基類builder中將各種build函式定義為抽象方法,必須在子類中實現。這樣不僅僅使得建造小人的過程不變,而且很利於系統的擴充套件,一旦出現其他種類的人根本不需要改動之前的fatpersonbuider,thinpersonbuilder,director,product等類,只需要新新增新的類。符合ocp原則。

到這裡不知道大家有沒有這樣的疑問,建造者模式和工廠模式非常相似啊,確實是非常的相似,建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的建立過程。兩者也有結合使用:比如眾神造人,女媧利用建造者模式負責把靈魂、耳目、手臂等組合成乙個完整的人,而皇帝、桑林等人各自利用工廠方法模式創造出靈魂,耳目,手臂等。女媧不必考慮靈魂、耳目、手臂是什麼樣子的,怎麼創造出來的,這就成為了乙個由建造者模式和工廠方法模式組合而成的系統。

3.使用建造者模式的場合和好處

使用建造者模式的好處:

1.使用建造者模式可以使客戶端不必知道產品內部組成的細節。

2.具體的建造者類之間是相互獨立的,對系統的擴充套件非常有利。

3.由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模組產生任何影響。

使用建造模式的場合:

1.建立一些複雜的物件時,這些物件的內部組成構件間的建造順序是穩定的,但是物件的內部組成構件面臨著複雜的變化。

2.要建立的複雜物件的演算法,獨立於該物件的組成部分,也獨立於組成部分的裝配方法時。

設計模式之建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟 設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設 計模式 和...

設計模式之建造者模式

建造者模式也叫生成器模式,是一種物件建立型模式,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承或過載的方式,動態的建立具有復合屬性的物件。應用場景 物件的建立 builder 模式是為物件的建立而設計的模式 建立的是乙個復合物件 被建立的物件為乙個具有復合屬性的復合物件 關...

設計模式之建造者模式

在做服務介面的時候,往往在業務處理之前需要做業務校驗,格式校驗等業務前處理。這些介面有個相同的特徵,就是必須經過這些處理步驟之後才能做核心的業務處理,拓展的服務介面也必須經過這些處理。基於這個特徵,我們就來分析一下設計模式中,建造者模式。我們先建乙個基礎的服務類 public abstract cl...