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

Java 工廠方法模式深度解析:解耦創建邏輯、擴展開閉原則實戰

     編輯:Java 相關知識

工廠方法模式定義創建對象的接口,由子類決定實例化哪個具體類。將對象創建延遲到子類,實現框架與業務解耦,是 Spring IOC、JDBC、日誌框架等基礎設施的核心設計。

核心角色

  • Product (抽象產品):定義產品接口 (如 ICar)。
  • ConcreteProduct (具體產品):實現接口 (如 Sedan, SUV)。
  • Factory (抽象工廠):聲明工廠方法 createProduct()。
  • ConcreteFactory (具體工廠):實現工廠方法,返回具體產品。

代碼實現


// 產品接口
interface ICar { void drive(); }

// 具體產品
class Sedan implements ICar { public void drive() { System.out.println("駕駛轎車"); } }
class SUV implements ICar { public void drive() { System.out.println("駕駛 SUV"); } }

// 抽象工廠
interface ICarFactory { ICar createCar(); }

// 具體工廠
class SedanFactory implements ICarFactory {
    public ICar createCar() { return new Sedan(); }
}
class SUVFactory implements ICarFactory {
    public ICar createCar() { return new SUV(); }
}

// 客戶端:面向抽象編程
public class Client {
    public static void main(String[] args) {
        ICarFactory factory = new SUVFactory(); // 可動態替換/配置注入
        ICar car = factory.createCar();
        car.drive();
    }
}

三大工廠模式對比

優勢總結

  1. 解耦:客戶端零依賴具體類,僅依賴抽象接口。
  2. 單一職責:創建邏輯集中在工廠,業務邏輯純粹。
  3. 開閉原則:新增產品 = 新增工廠類,不動舊代碼。
  4. 可測試性:易於 Mock 工廠注入測試雙。

實戰場景

  • JDBC DriverManager:getConnection() 根據 URL 協議返回不同 Driver 實現。
  • 日誌門面 (SLF4J):LoggerFactory.getLogger() 綁定 Logback/Log4j 具體實現。
  • Spring BeanFactory:getBean() 根據配置創建單例/原型 Bean,核心即工廠方法。
  • 支付渠道適配:PayFactory.create(Channel.WECHAT) 返回微信/支付寶/銀聯具體支付實現。

工廠方法不是「為了 new 而 new」,而是在變化點建立抽象邊界。識別系統中「頻繁變化的對象創建邏輯」,引入工廠方法,是架構師分層解耦的關鍵一筆。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
模式核心特點擴展性適用場景
簡單工廠一個工廠類 + switch/if 判斷❌ 修改工廠類違背開閉原則產品固定、數量少、無頻繁擴展
工廠方法一個抽象工廠 + 多個具體工廠✅ 新增產品只需新增工廠類框架層、插件化架構、需隔離創建邏輯
抽象工廠工廠族:創建一族相關產品✅ 支持產品族擴展跨平台 UI、多數據庫支持、換膚系統