簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析
前言
今天我來全面總結一下Android開發中最常用的設計模式 - 簡單工廠模式。
目錄

944365-10f8cb315e0f4b1d.jpg
1. 含義
簡單工廠模式又叫靜態方法模式(因為工廠類定義了一個靜態方法)
現實生活中,工廠是負責生產產品的;同樣在設計模式中,簡單工廠模式我們可以理解為負責生產物件的一個類,稱為“工廠類”。
2. 解決的問題
將“類例項化的操作”與“使用物件的操作”分開,讓使用者不用知道具體引數就可以例項化出所需要的“產品”類,從而避免了在客戶端程式碼中顯式指定,實現瞭解耦。
即使用者可直接消費產品而不需要知道其生產的細節
3. 模式原理
3.1 模式組成

image.png
3.2 UML類圖

1.png
3.3 使用步驟
建立抽象產品類 & 定義具體產品的公共介面;
建立具體產品類(繼承抽象產品類) & 定義生產的具體產品;
建立工廠類,通過建立靜態方法根據傳入不同引數從而建立不同具體產品類的例項;
外界通過呼叫工廠類的靜態方法,傳入不同引數從而建立不同具體產品類的例項
4. 例項
接下來我用一個例項來對簡單工廠模式進行更深一步的介紹。
4.1 例項概況
背景:小成有一個塑料生產廠,用來做塑料加工生意
目的:最近推出了3個產品,小成希望使用簡單工廠模式實現3款產品的生產
4.2 使用步驟
實現程式碼如下:
步驟1. 建立抽象產品類,定義具體產品的公共介面
abstract class Product{ public abstract void Show(); }
步驟2. 建立具體產品類(繼承抽象產品類),定義生產的具體產品
//具體產品類A classProductA extendsProduct{ @Override public void Show() { System.out.println("生產出了產品A"); } } //具體產品類B classProductB extendsProduct{ @Override public void Show() { System.out.println("生產出了產品C"); } } //具體產品類C classProductC extendsProduct{ @Override public void Show() { System.out.println("生產出了產品C"); } }
步驟3. 建立工廠類,通過建立靜態方法從而根據傳入不同引數建立不同具體產品類的例項
classFactory { public static Product Manufacture(String ProductName){ //工廠類裡用switch語句控制生產哪種商品; //使用者只需要呼叫工廠類的靜態方法就可以實現產品類的例項化。 switch (ProductName){ case "A": return new ProductA(); case "B": return new ProductB(); case "C": return new ProductC(); default: return null; } } }
步驟4. 外界通過呼叫工廠類的靜態方法,傳入不同引數從而建立不同具體產品類的例項
//工廠產品生產流程 public class SimpleFactoryPattern { public static void main(String[] args){ Factory mFactory = new Factory(); //客戶要產品A try { //呼叫工廠類的靜態方法 & 傳入不同引數從而建立產品例項 mFactory.Manufacture("A").Show(); }catch (NullPointerException e){ System.out.println("沒有這一類產品"); } //客戶要產品B try { mFactory.Manufacture("B").Show(); }catch (NullPointerException e){ System.out.println("沒有這一類產品"); } //客戶要產品C try { mFactory.Manufacture("C").Show(); }catch (NullPointerException e){ System.out.println("沒有這一類產品"); } //客戶要產品D try { mFactory.Manufacture("D").Show(); }catch (NullPointerException e){ System.out.println("沒有這一類產品"); } } }
結果輸出:
生產出了產品A 生產出了產品C 生產出了產品C 沒有這一類產品
5. 優點
將建立例項的工作與使用例項的工作分開,使用者不必關心類物件如何建立,實現瞭解耦;
把初始化例項時的工作放到工廠裡進行,使程式碼更容易維護。 更符合面向物件的原則 & 面向介面程式設計,而不是面向實現程式設計。
6. 缺點
工廠類集中了所有例項(產品)的建立邏輯,一旦這個工廠不能正常工作,整個系統都會受到影響;
違背“開放 - 關閉原則”,一旦新增新產品就不得不修改工廠類的邏輯,這樣就會造成工廠邏輯過於複雜。
簡單工廠模式由於使用了靜態工廠方法,靜態方法不能被繼承和重寫,會造成工廠角色無法形成基於繼承的等級結構。
7. 應用場景
在瞭解了優缺點後,我們知道了簡單工廠模式的應用場景:
客戶如果只知道傳入工廠類的引數,對於如何建立物件的邏輯不關心時;
當工廠類負責建立的物件(具體產品)比較少時。