在設計模式中,工廠模式基本有三種,簡單工廠模式,工廠方法模式,抽象工廠模式,嚴格來說,簡單工廠模式並不算是一種設計模式,甚至可以理解成為一種程式設計的習慣,或者就是靜態工廠方法,這種模式也是建立型模式的一種,在簡單工廠模式中,可以根據傳遞的引數不同,返回不同類的例項。簡單工廠模式定義了乙個類,這個類專門用於建立其他類的例項,這些被建立的類都有乙個共同的父類,這麼做主要是為了把物件的建立和物件的使用隔離開,達到一種解耦的效果,讓使用者不必關心物件是怎麼建立的,只要想用的時候要過來可以用就行.在開發過程中是比較簡單並且應用非常廣的一種設計模式.
根據依賴倒轉原則,我們可以知道,在編碼中我們應該針對介面程式設計,而不是針對實現程式設計,如果我們一直使用new關鍵字來建立乙個物件,這不就是在針對實現程式設計麼?針對介面程式設計,也就是常說的物件導向思想,多型的一種表現形式,在開發中,最頭疼的無非就是需求變來變去,每次改變需求都去改**是乙個非常蛋疼的事,同時也就違背了開閉原則,顯然是不可取的,那我們怎麼去設計一種可拓展,可復用並且符合設計原則的邏輯來呢,顯然這個簡單工廠就是這麼來的,而理解起來也很好理解,比如說去食堂打飯,你只需要告訴阿姨你要什麼菜,阿姨就會把飯給你,而這個飯誰做的,怎麼做的,你完全不用知道,會吃就行,這其實就是一種簡單工廠模式的場景.相比於你自己去做飯,要簡單的多了,也省事多了吧.
先來看看簡單工廠模式的uml模型:
工廠類(工廠): 工廠,專門建立例項類的工廠同時提供乙個方法,根據傳入引數的不同返回不同的例項.
file日誌(具體產品): 具體的檔案日誌例項
db日誌(具體產品): 具體的資料庫日誌例項
抽象product(抽象產品): 抽象產品,為所有日誌產品的父類
舉個栗子:
工廠類
/**
* @author zhangcq
* @description: 工廠
* @time: 2019/3/4 14:04
* @version 1.0
*/public class logsfactory
return logs;}}
抽象產品:
/**
* @author zhangcq
* @description: 抽象產品
* @time: 2019/3/4 14:04
* @version 1.0
*/public inte***ce logs
db日誌:
/**
* @author zhangcq
* @description: db產品
* @time: 2019/3/4 14:16
* @version 1.0
*/public class logsdb implements logs
}
file日誌:
/**
* @author zhangcq
* @description: file產品
* @time: 2019/3/4 14:17
* @version 1.0
*/public class logsfile implements logs
}
客戶端:
/**
* @author zhangcq
* @description: 客戶端
* @time: 2019/3/4 14:18
* @version 1.0
*/public class logsclient
}
簡單工廠模式的主要優點如下:
(1) 工廠類包含必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的職責,而僅僅「消費」產品,簡單工廠模式實現了物件建立和使用的分離。
(2) 客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,通過簡單工廠模式可以在一定程度減少使用者的記憶量。
(3) 通過引入配置檔案,可以在不修改任何客戶端**的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性
簡單工廠模式的主要缺點如下:
(1) 由於工廠類集中了所有產品的建立邏輯,職責過重,一旦不能正常工作,整個系統都要受到影響。
(2) 使用簡單工廠模式勢必會增加系統中類的個數(引入了新的工廠類),增加了系統的複雜度和理解難度。
(3) 系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,在產品型別較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴充套件和維護。
(4) 簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。
在以下情況下可以考慮使用簡單工廠模式:
(1) 工廠類負責建立的物件比較少,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。
(2) 客戶端只知道傳入工廠類的引數,對於如何建立物件並不關心。
建立型模式之簡單工廠模式
複習用,不適合初學。複習用,不適合初學。複習用,不適合初學。1.定義 factory pattern 簡單工廠模式又稱為靜態 static 工廠模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。2.角色 f...
建立型模式之簡單工廠模式
寫在前面 閱讀本文之前你需要知道 1.連線基本的uml類圖結構 2.類關係 簡單工廠模式並不屬於gof的23個經典模式,但通常把它作為學習其他工廠模式的基礎,它的設計思想比較簡單 首先將需要建立的各種不同物件的相關 封裝到不同的類中,這些類稱為具體產品類,而將它們公共的 進行抽象和提取後封裝到乙個抽...
建立型模式前奏之簡單工廠模式
建立型模式是用來建立物件的,其中包含設計模式前奏說的共5個設計模式。簡單工廠模式不屬於23種設計模式,也不屬於5種建立型模式,但它是建立型模式的基礎,所以以建立型模式前奏為題說一下。工廠模式我們經常見到,不管是資料庫連線工廠還是伺服器連線工廠或者其他,顧名思義,都是用來提供產品的。簡單工廠模式很容易...