创建型模式---工厂模式
從簡單到復雜有簡單工廠模式-->工廠方法模式-->抽象工廠模式
簡單工廠模式(Simple Factory Pattern)
定義
又稱為靜態工廠方法(Static Factory Method)模式,它屬于類創建型模式。在簡單工廠模式中,可以根據參數的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
產生背景
當一個模塊只需要一個工廠類,沒必要把工廠類也抽象出來的時候,使用靜態方法就行。就像規模小的時候,各種產品都在一個工廠里混著生產,有點類似小作坊。
UML圖
代碼
public class SimpleDrinkFactory {public static <T extends Drink> T getDrink(Class<T> c) {//定義一個飲料Drink drink = null;try {drink = (Drink) Class.forName(c.getName()).newInstance();} catch (Exception e) {System.out.println("生產飲料失敗!");}return (T) drink;} }public class SimpleDrinkFactoryTest {@Testpublic void test() {Drink wine = SimpleDrinkFactory.getDrink(Wine.class);wine.getName();Drink milk = SimpleDrinkFactory.getDrink(Milk.class);milk.getName();Drink juice = SimpleDrinkFactory.getDrink(Juice.class);juice.getName();} }使用場景:
工廠方法模式(Factory Method Pattern)
意圖
定義一個用于創建對象的接口,讓子類決定實例化哪一個類。 Factory Method使一個類的實例化延遲到其子類。
適用性
在下列情況下可以使用 Factory Method模式:
- 當一個類不知道它所必須創建的對象的類的時候。
- 當一個類希望由它的子類來指定它所創建的對象的時候。
- 當類將創建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。
結構
參與者
- P r o d u c t( D o c u m e n t )
-- 定義工廠方法所創建的對象的接口。 - C o n c r e t e P r o d u c t(M y D o c u m e n t)
-- 實現P r o d u c t接口。 - C r e a t o r(A p p l i c a t i o n)
-- 聲明工廠方法,該方法返回一個 P r o d u c t類型的對象。 C r e a t o r也可以定義一個工廠方法的缺省實現,它返回一個缺省的 C o n c r e t e P r o d u c t對象。
-- 可以調用工廠方法以創建一個 P r o d u c t對象。 - C o n c r e t e C r e a t o r(M y A p p l i c a t i o n)
-- 重定義工廠方法以返回一個 C o n c r e t e P r o d u c t實例。
協作
- Creator依賴于它的子類來定義工廠方法,所以它返回一個適當的 C o n c r e t e P r o d u c t實例。
抽象工廠模式(Abstract Factory Pattern)
意圖
提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。重點在于在于一系列、相關(相互依賴)兩個詞。
結 構
適用性
在以下情況可以使用 Abstract Factory模式
- 一個系統要獨立于它的產品的創建、組合和表示時。
- 一個系統要由多個產品系列中的一個來配置時。
- 當你要強調一系列相關的產品對象的設計以便進行聯合使用時。
- 當你提供一個產品類庫,而只想顯示它們的接口而不是實現時。
舉例
知乎上有個很好的例子,就是遠程武器的例子,比如手槍、步槍、打炮、弩。這些武器的生產工廠不止生產武器,同時生產配套的彈藥(箭矢),這個注意一個詞配套,也就是這些彈藥和武器是配套使用的,不能混著來,手槍不能用步槍子彈,步槍也不能用手槍子彈,大炮就更不用說了。而對于客戶端來說只需要工廠就行,不需要關系這些武器和這些彈藥如何搭配,把搭配組合的事兒讓工廠管了。客戶端只需要給抽象工廠引用替換具體的工廠實例,就能從工廠中獲取到相應的武器和對應的彈藥,而不會混亂。
區別
和工廠方法模式的區別在于,工廠方法模式只關心單一產品的生產,而抽象工廠模式關心的是整體配套,工廠方法模式有些類似工廠中的生產線,只關心這條生產線是生產武器還是彈藥。
工廠模式并沒有簡單化代碼,而是封裝了邏輯,降低客戶端的使用成本和修改的成本,并沒有降低開發成本。
轉載于:https://www.cnblogs.com/waynelsh/p/8870735.html
總結
以上是生活随笔為你收集整理的创建型模式---工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: USACO-Section2.3 Mon
- 下一篇: docker0: iptables: N