簡單工廠模式、工廠方法模式、抽象工廠模式的異同

工廠就是用來創造東西。編程

簡單工廠模式:

定義:

提供了一個建立對象實例的功能,而不關心具體的實現細節。spa

優勢:

  1. 封裝:實現了組件的封裝,可讓組建的外部能夠面向接口編程
  2. 解耦:客戶端無須知道實現類,實現了客戶端與具體實現的解耦

缺點:

  1. 增長複雜度:若經過傳參來選擇具體的實現類,就會暴露實現細節,而且增長客戶端的使用難度,須要瞭解每一個參數的意義。(能夠經過可配置方法來解決這個問題)

靜態工廠模式:

不須要建立工廠實例,方法爲靜態設計

 

工廠方法模式:

結構圖:

定義:

定義一個建立對象的接口,讓子類決定實例化哪個類,工廠方法使一個對象的實例化延遲到子類。對象

功能:

在父類不知道具體實現的狀況下,完成自身的功能調用,具體的實現由子類完成。設計的時候不須要考慮具體的實現,須要哪一個對象在,經過工廠方法返回就能夠。blog

實現:接口

工廠方法的實現,通常是定義一個抽象類,包含建立對象所需的抽象方法則爲工廠方法。也能夠實現爲具體的類,這樣就會有一個默認的方法,子類去覆蓋這個方法,爲子類提供掛鉤。產品

在工廠方法模式裏,要麼使用Creator對象,要麼使用Creator建立出來的對象, 一版客戶端不會直接使用工廠方法。擴展

優勢:

  1. 工廠方法模式能夠在不知具體狀況的時候編程,須要某個產品對象,只須要知道接口,不須要知道具體的實現,具體的實現讓子類完成。
  2. 更容易擴展對象的新版本,工廠方法給子類提供一個掛鉤。

缺點:

  1. 具體的工廠方法和產品對象是耦合的

抽象工廠模式:

定義:

提供一個建立一系列相關或相互依賴的接口,而無需指定他們具體須要實現的類配置

功能:

爲一系列相關對象或相互依賴的對象,建立一個接口。方法

優勢:

  1. 分離接口與實現,客戶端使用抽象工廠建立對象,而不須要知道具體的實現是誰。
  2. 是的切換產品簇變的容易,客戶端切換不一樣的工廠實現,就是切換了不一樣的產品簇。

缺點:

  1. 不容易擴展新的產品,要是擴展就要修改抽象工廠,對應全部的實現類都要修改
  2. 容易形成類層次複雜

總結:

簡單工廠與工廠方法的區別

工廠方法的本質是用來選擇實現的,跟簡單工廠的區別在於工廠方法的實現是延遲到子類的。若是把工廠方法的實現放到父類直接實現就至關於簡單工廠。

簡單工廠與抽象工廠的區別

簡單工廠用來選擇實現,能夠選擇任意接口的實現,一個工廠能夠用於選擇和建立多個個對象,可是這多個對象之間是沒有聯繫的。

抽象工廠是用來選擇產品簇的實現,抽象工廠有多個方法來選擇並建立對象,這些對象之間一般是有關係的。若是抽象工廠只有一個實現,不分層次,則至關於簡單工廠。

抽象工廠和工廠方法模式的區別

這兩個模式既有區別也有聯繫,能夠組合使用。工廠方法模式是針對單獨的產品的建立,而抽象工廠針對產品簇的建立,抽象工廠能夠退化成工廠方法,工廠方法能夠退化成簡單工廠。

在抽象工廠的實現中,可使用簡單工廠來提供抽象工廠的具體實現,能夠這麼組合使用。

相關文章
相關標籤/搜索