08.17 設計模式之創建類模式PK

創建類模式包括:

  1. 工廠方法模式
  2. 建造者模式
  3. 抽象工廠模式
  4. 單例模式
  5. 原型模式

創建類模式能夠提供對象的創建和管理職責.

其中單例模式和原型模式非常容易理解, 單例模式是要保持在內存中只有一個對象,原型模式是要求通過複製的方式產生一個新的對象,這兩個不容易混淆.

工廠方法模式VS建造者模式

工廠方法模式注重的是整體對象的創建方法,而建造者模式注重的是部件構建的過程,旨在通過一步一步的精確構造創建出一個複雜的對象.

工廠方法模式和建造者模式的區別:

  1. 意圖不同. 在工廠方法模式中, 我們關注的是產品的整體,無需關心產品的各部分是如何創建出來的; 但是在建造者模式中,一個具體產品的產生是依賴各個部件的產生以及裝配順序,它關注的是"由零件一步一步地組裝出產品對象". 簡單地說, 工廠模式是一個對象創建的粗線條應用,建造者模式則是通過細線條勾勒出一個複雜對象,關注的是產品組成部分的創建過程.
  2. 產品的複雜度不同. 工廠方法模式創建的產品一般都是單一性質產品,而建造者模式創建的則是一個複合產品,它由各個部件複合而成,不見不同產品對象當然不同.

在具體應用中如何選擇呢?這取決於我們在做系統設計時的意圖, 如果需要詳細關注一個產品不見的生產、安裝步驟,則選擇建造者 ,否則選擇工廠方法模式

抽象工廠模式VS建造者模式

抽象工廠模式實現對產品家族的創建, 一個產品家族是這樣一系列產品: 具有不同分類維度的產品組合,採用抽象工廠模式不需要關心構建過程,只關心什麼產品由什麼工廠生產即可. 而建造者模式則是要求按照指定的藍圖建造產品, 它的主要目的是通過組裝零配件而產生一個新產品,兩者的區別還是比較明顯的.

抽象工廠模式比建造者模式的尺度要大, 它關注產品整體,而建造者模式關注構建過程, 因此建造者模式可以很容易的構建出一個嶄新的產品, 只要導演類提供具體的製作流程.

如果希望屏蔽對象的創建過程,只提供一個封裝良好的對象,可以選擇抽象工廠模式.而建造者模式可以用在構件的裝配方面,如通過裝配不同的組件或者相同組件的不同順序,可以產生一個新的 對象, 它可以產生一個非常靈活的架構,方便的擴展和 維護系統

工廠方法模式VS抽象工廠模式

工廠方法模式和抽象工廠模式都實現了對象的創建, 都是不需要關心其構建過程的.

工廠方法模式中我們把生成產品類的時間延遲,就是通過對應的工廠類來生成對應的產品類,在這裡我們就可以實現“開發-封閉”原則,無論加多少產品類,我們都不用修改原來類中的代碼,而是通過增加工廠類來實現。但是這還是有缺點的,如果產品類過多,我們就要生成很多的工廠類。假如我們要實現的產品接口不止一個,也就是有多個產品接口,不同產品接口有對應的產品族。什麼是產品族呢?簡單的理解就是,不同牌子產的車裡面會有跑車類型,家庭類型,商用類型等的車,不同牌子的車的跑車類型的車可以組成一個產品族。對於這種情況我們可以採用抽象工廠模式。

抽象工廠模式中我們可以定義實現不止一個接口,一個工廠也可以生成不止一個產品類,抽象工廠模式較好的實現了“開放-封閉”原則,是較為抽象,並具一般性的模式。我們在使用中要注意使用抽象工廠模式的條件。


分享到:


相關文章: