設計模式(04)創建者模式

From Now On,Let us begin Design Patterns。

創建者模式

定義

  • 將一個複雜對象的構建與它的表示分離,使用同樣的構建過程可以創建不同的表示。 Separate theconstruction of a complex object from its representation so that the sameconstruction process can create different representations.

創建者模式有如下幾個特點:

1. 當創建複雜對象的算法應該獨立於該對象的組成部分以及它們的裝配方式時由於一個複雜對象的單個屬性可能會發生變化(例如:製造汽車時使用的某一部件屬於不同的廠家)但是整個複雜對象的構建過程卻不會發生變化(例如:汽車的構建圖紙已經固定,只需要把部件按照圖紙裝配好)

2. 當構造過程必須允許被構造的對象有不同表示時

通用類圖:
這裏寫圖片描述

角色解說:

Product產品類:一般是一個較爲複雜的對象,也就是說創建對象的過程比較複雜,一般會有比較多的代碼量。在本類圖中,產品類是一個具體的類,而非抽象類。實際編程中,產品類可以是由一個抽象類與它的不同實現組成,也可以是由多個抽象類與他們的實現組成。

Builder抽象構造者:引入抽象建造者的目的,是爲了將建造的具體過程交與它的子類來實現。這樣更容易擴展。一般至少會有兩個抽象方法,一個用來建造產品,一個是用來返回產品。

ConcreteBuilder具體建造者:實現抽象類的所有未實現的方法,具體來說一般是兩項任務:組建產品;返回組建好的產品。

Director導演類:負責調用適當的建造者來組建產品,導演類一般不與產品類發生依賴關係,與導演類直接交互的是建造者類。一般來說,導演類被用來封裝程序中易變的部分。

創建者模式的優點:

  • 封裝性:導演類起到封裝(應該是封裝產品構造參數設定,避免高層模塊深入到建造者內部的實現類。當然,在建造者模式比較龐大時,導演類可以有多個)的作用,可以使客戶端不呢知道產品內部組成的細節。

  • 建造者獨立,容易擴展:具體的建造者之間是相互獨立的,對系統擴展有利。如果有新的需求,通過實現一個新的建造者類就可以完成,基本上不用修改之前已經測試通過的代碼,因此也就不會對原有功能引入風險。

  • 便於控制細節風險:由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任何影響。

  • 建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以取得比較好的穩定性。

創建者模式的缺點:

  • 不清楚

創建者模式的使用場景:

相同的方法,不同的執行順序,產生不同的事件結果時,可以採用建造者模式。

創建者模式的例子:

具體的產品:
這裏寫圖片描述

創建者類:負責具體的實現,我們具體的其他的實現可以在這裏擴展,新建新的創建者類就可以了,並且實現對應的功能
這裏寫圖片描述

導演:負責具體的業務邏輯,當我們需要其他的流程的時候,可以加新的導演類
這裏寫圖片描述

建造房屋的場景:
這裏寫圖片描述

建造結果:
這裏寫圖片描述

我們如何對當前例子實現擴展呢?

接着舉例說明:(從兩方面:工人和導演)
這裏寫圖片描述
導演類:
這裏寫圖片描述

測試:
這裏寫圖片描述

運行結果:
這裏寫圖片描述

發佈了60 篇原創文章 · 獲贊 41 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章