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

Java 設計模式深度解析:工廠方法模式

     編輯:Java 相關知識

什麼是工廠方法模式?

工廠方法模式屬於創建型模式,定義為:定義一個用於創建對象的介面,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。

工廠模式三兄弟

按抽象程度分:

  1. 簡單工廠(靜態工廠):無工廠介面,靜態方法產出產品,擴展性弱。
  2. 工廠方法(本文重點):引入工廠介面,子類決定具體產品,擴展性強。
  3. 抽象工廠:處理多個產品等級結構(產品族)。

四大核心要素

工廠方法類圖

  • 工廠介面:核心契約,與調用者直接交互。
  • 工廠實現:決定如何實例化產品,擴展靈活。
  • 產品介面:定義產品規範,調用者依賴它而非具體類。
  • 產品實現:具體行為邏輯。

代碼實現:組裝汽車

interface IProduct { void productMethod(); }
class Product implements IProduct { public void productMethod() { System.out.println("產品"); } }

interface IFactory { IProduct createProduct(); }
class Factory implements IFactory { public IProduct createProduct() { return new Product(); } }

public class Client {
    public static void main(String[] args) {
        IFactory factory = new Factory();
        IProduct product = factory.createProduct();
        product.productMethod();
    }
}

核心優勢

  • 結構清晰,封裝變化:複雜實例化邏輯隱藏在工廠內部。
  • 屏蔽具體類:調用者只依賴介面,具體實現可隨意替換。
  • 降低耦合:符合迪米特法則,調用者無需知道產品依賴的眾多類。
  • 擴展性好:新增產品只需新增工廠實現,不動既有代碼。

適用場景

  • 需要生成複雜對象(簡單對象用 new 即可,別過度設計)。
  • 調用者自行組裝會引入過多依賴,需解耦。
  • 系統需良好擴展性,不同產品用不同工廠組裝。

實戰對比:無工廠 vs 有工廠

無工廠:Client 直接 new Engine()、new Wheel()、new Car(...),高耦合、難擴展、違反迪米特法則。

有工廠:Client 僅依賴 IFactory,Factory.createCar() 內部封裝組裝邏輯,耦合度大幅降低,擴展只需新增 Factory 實現。

總結

工廠方法模式是「解耦利器」,將實例化延遲到子類,讓調用者專注於業務邏輯而非對象構建細節。掌握其與簡單工廠、抽象工廠的邊界,靈活選型。

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