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

Java 設計模式:工廠模式(Factory Pattern)深度解析

     編輯:Java 相關知識

什麼是工廠模式?

工廠模式是一種創建型設計模式,其核心在於提供一個創建對象的介面,讓子類決定實例化哪一個類別。簡單來說,它將對象的創建邏輯封裝起來,讓調用者不需要知道具體的類別名稱,只需透過工廠獲取所需的產品實例。

為什麼需要工廠模式?

在 Java 開發中,new 關鍵字無處不在。但隨著系統擴展,直接使用 new 會導致:

  • 高耦合:客戶端代碼依賴具體實現類,一旦變更需修改大量代碼。
  • 違反開閉原則:新增產品類型時,必須修改現有代碼而非擴展。
  • 初始化邏輯分散:複雜的對象初始化(如資料庫查詢、參數配置)若寫在建構子中,會導致建構子臃腫、難以維護。

工廠模式透過「委派」創建職責給專門的工廠類,完美解決上述問題。著名的 Jive 論壇系統大量採用此模式,足見其實用性。

工廠模式的演進與實作

1. 簡單工廠(Simple Factory)

雖非標準 GoF 模式,但最常用。透過一個靜態方法根據參數返回不同實例:

public class SampleFactory {
    public static Sample create(int type) {
        if (type == 1) return new SampleA();
        else if (type == 2) return new SampleB();
        throw new IllegalArgumentException("未知類型");
    }
}

客戶端調用:Sample s = SampleFactory.create(1); 完全屏蔽了具體子類。

2. 工廠方法(Factory Method)

定義一個創建對象的抽象方法,由子類實現。適用於「一個工廠對應一個產品」的場景:

public abstract class Factory {
    public abstract Sample create();
}

public class ConcreteFactoryA extends Factory {
    public Sample create() { return new SampleA(); }
}

3. 抽象工廠(Abstract Factory)

提供一個介面,可創建一系列「相關或依賴的對象」,而無需指定它們的具體類。例如同時生產 Sample 和 Sample2 兩條產品線:

public abstract class AbstractFactory {
    public abstract Sample createSample();
    public abstract Sample2 createSample2();
}

public class SimpleFactory extends AbstractFactory {
    public Sample createSample() { return new SampleA(); }
    public Sample2 createSample2() { return new Sample2A(); }
}

此模式將「同一風格」的產品綁定在同一工廠,確保產品間的協作一致性。

實戰案例:Jive ForumFactory 與 Java Pet Store

Jive ForumFactory 結合了單例模式與類載入機制,透過配置 className 實現資料庫存儲與文件存儲的無縫切換,展現了工廠模式強大的擴展性。

Pet Store 的 CatalogDAOFactory 則利用 JNDI 查找具體實現類,實現了 DAO 層的解耦,只需修改配置即可適配不同資料庫。

核心優勢總結

  • 解耦:創建者與調用者分離,降低依賴。
  • 擴展性:新增產品只需擴展工廠/產品類,無需動核心代碼。
  • 單一職責:創建邏輯集中管理,便於維護。

下次當你寫下 new Xxx() 時,請問自己:是否需要一個工廠來賦予系統更大的靈活性?

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