簡單工廠模式是屬於創建型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。 簡單工廠模式的UML ...
簡單工廠模式是屬於創建型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。
簡單工廠模式的UML圖:
簡單工廠模式深入分析:
簡單工廠模式解決的問題是如何去實例化一個合適的對象。
簡單工廠模式的核心思想就是:有一個專門的類來負責創建實例的過程。
具體來說,把產品看著是一系列的類的集合,這些類是由某個抽象類或者介面派生出來的一個對象樹。而工廠類用來產生一個合適的對象來滿足客戶的要求。
如果簡單工廠模式所涉及到的具體產品之間沒有共同的邏輯,那麼我們就可以使用介面來扮演抽象產品的角色;如果具體產品之間有功能的邏輯或,我們就必須把這些共同的東西提取出來,放在一個抽象類中,然後讓具體產品繼承抽象類。為實現更好復用的目的,共同的東西總是應該抽象出來的。
在實際的的使用中,抽閑產品和具體產品之間往往是多層次的產品結構,如下圖所示:
來一個具體的例子:
優點:
工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該創建哪個具體類的對象.
通過使用工廠類,外界可以從直接創建具體產品對象的尷尬局面擺脫出來,僅僅需要負責“消費”對象就可以了。而不必管這些對象究竟如何創建及如何組織的.
明確了各自的職責和權利,有利於整個軟體體繫結構的優化。
缺點:
由於工廠類集中了所有實例的創建邏輯,違反了高內聚責任分配原則,將全部創建邏輯集中到了一個工廠類中;它所能創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了;
當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件創建不同實例的需求.這種對條件的判斷和對具體產品類型的判斷交錯在一起,很難避免模塊功能的蔓延,對系統的維護和擴展非常不利。
使用場景 工廠類負責創建的對象比較少; 客戶只知道傳入工廠類的參數,對於如何創建對象(邏輯)不關心; 由於簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用。