首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 設計模式:簡單工廠與抽象工廠模式深度解析與實作

     編輯:Java 相關知識

簡單工廠模式

又稱靜態工廠方法模式,由一個工廠類根據傳入參數決定建立哪種產品實例。屬於創建型模式,但不屬於 GoF 23 種經典模式。

基本實作

// 產品介面
public interface Calculator { double calculate(double a, double b); }

// 具體產品
public class AddCalculator implements Calculator { public double calculate(double a, double b) { return a + b; } }
public class SubCalculator implements Calculator { public double calculate(double a, double b) { return a - b; } }

// 簡單工廠
public class CalculatorFactory {
    public static Calculator create(String operator) {
        switch (operator) {
            case "+": return new AddCalculator();
            case "-": return new SubCalculator();
            // ...
            default: throw new IllegalArgumentException("不支援的運算符:" + operator);
        }
    }
}

改良:多方法工廠

public class CalculatorMultiFactory {
    public static Calculator createAdd() { return new AddCalculator(); }
    public static Calculator createSub() { return new SubCalculator(); }
    // ...
}

優點:編譯期類型安全,IDE 友好。缺點:新增產品需修改工廠類,違反開閉原則。

抽象工廠模式

提供一個介面,用於建立「相關或依賴物件的家族」,而無需指定具體類別。核心角色:

  • 抽象工廠:宣告建立抽象產品的方法群
  • 具體工廠:實作建立具體產品
  • 抽象產品:產品族的介面
  • 具體產品:實際建立的物件

實作範例:UI 組件庫(按鈕、輸入框)跨平台

// 抽象產品
interface Button { void render(); }
interface TextField { void render(); }

// 具體產品:Windows 風格
class WinButton implements Button { public void render() { System.out.println("渲染 Windows 按鈕"); } }
class WinTextField implements TextField { public void render() { System.out.println("渲染 Windows 輸入框"); } }

// 具體產品:Mac 風格
class MacButton implements Button { public void render() { System.out.println("渲染 Mac 按鈕"); } }
class MacTextField implements TextField { public void render() { System.out.println("渲染 Mac 輸入框"); } }

// 抽象工廠
interface GUIFactory {
    Button createButton();
    TextField createTextField();
}

// 具體工廠
class WinFactory implements GUIFactory {
    public Button createButton() { return new WinButton(); }
    public TextField createTextField() { return new WinTextField(); }
}
class MacFactory implements GUIFactory {
    public Button createButton() { return new MacButton(); }
    public TextField createTextField() { return new MacTextField(); }
}

// 客戶端
public class Application {
    private final Button button;
    private final TextField textField;
    public Application(GUIFactory factory) {
        button = factory.createButton();
        textField = factory.createTextField();
    }
    public void renderUI() { button.render(); textField.render(); }
}

模式比較與選擇指南

維度簡單工廠抽象工廠
適用場景產品種類少、固定、邏輯簡單產品族多、需跨平台/主題切換、產品間有協作關係
擴充性新增產品需修改工廠(違反開閉原則)新增產品族只需新增具體工廠,符合開閉原則
複雜度低高
耦合度客戶端耦合具體工廠類客戶端僅依賴抽象工廠介面

總結

簡單工廠適合輕量級場景,抽象工廠適合構建可擴充的產品族體系。實務中常搭配依賴注入框架(如 Spring)管理工廠實例,進一步解耦。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved