工廠設計模式

2021-08-28 04:49:17 字數 1591 閱讀 9994

理解的不是特別明白 ,原因在於 沒有想到具體的應用場景;

以下copy別人的解說;

工廠模式根據抽象程度的不同分為三種:

簡單工廠模式(也叫靜態工廠模式)

工廠方法模式(也叫多形性工廠)

抽象工廠模式(也叫工具箱)

簡單工廠模式

實質是由乙個工廠類根據傳入的引數,動態決定應該建立哪乙個產品類(這些產品類繼承自乙個父類或介面)的例項。簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項

工廠方法模式

工廠方法是粒度很小的設計模式,因為模式的表現只是乙個抽象的方法。

提前定義用於建立物件的介面,讓子類決定例項化具體的某乙個類,即在工廠和產品中間增加介面,工廠不再負責產品的建立,由介面針對不同條件返回具體的類例項,由具體類例項去實現。

抽象工廠模式

當有多個抽象角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品物件。它有多個抽象產品類,每個抽象產品類可以派生出多個具體產品類,乙個抽象工廠類,可以派生出多個具體工廠類,每個具體工廠類可以建立多個具體產品類的例項。

工廠模式的優點:

1、乙個呼叫者想建立乙個物件,只要知道其名稱就可以了,降低了耦合度。

2、擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以。使得**結構更加清晰。

3、遮蔽產品的具體實現,呼叫者只關心產品的介面。

工廠模式的缺點:

每次增加乙個產品時,都需要增加乙個具體類和物件實現工廠(這裡可以使用反射機制來避免),使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。所以對於簡單物件來說,使用工廠模式反而增加了複雜度。

工廠模式的適用場景:

1,  乙個物件擁有很多子類。

2, 建立某個物件時需要進行許多額外的操作。

3, 系統後期需要經常擴充套件,它把物件例項化的任務交由實現類完成,擴充套件性好。

利用父類的向下轉型(使用父類型別的引用指向子類的物件)是可以達到類似於工廠模式的效果的,那為什麼還要用工廠模式呢?

把指向子類物件的父類引用賦給子類引用叫做向下轉型

使用向下轉型在客戶端例項化子類的時候,嚴重依賴具體的子類的名字。當我們需要更改子類的構造方法的時候,比如增加乙個引數,或者更改了子類的類名,所有的new出來的子類都需要跟著更改。

但如果我們使用工廠模式,我們僅僅需要在工廠中修改一下new的**,其餘專案中用到此例項的都會跟著改,而不需要我們手動去操作。

總結:

無論是簡單工廠模式、工廠模式還是抽象工廠模式,它們本質上都是將不變的部分提取出來,將可變的部分留作介面,以達到最大程度上的復用。究竟用哪種設計模式更適合,這要根據具體的業務需求來決定。

po上 **鏈結

設計模式 工廠設計模式

用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...

設計模式 工廠設計模式

工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...

設計模式 工廠模式(簡單工廠)

一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...