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

Java 設計模式之工廠方法模式:深度解析與實戰應用

     編輯:Java 相關知識

模式定義

工廠方法模式定義一個用於創建對象的接口,讓子類決定實例化哪個類。工廠方法將類的實例化延遲到其子類。
—— GoF《設計模式》

核心角色

  • Product(抽象產品):定義產品的公共接口
  • ConcreteProduct(具體產品):實現抽象產品接口
  • Creator(抽象工廠):聲明工廠方法,返回 Product 類型
  • ConcreteCreator(具體工廠):實現工廠方法,創建具體產品實例

通用代碼結構

// 抽象產品
public abstract class Product {
    public void commonMethod() { /* 共同邏輯 */ }
    public abstract void specificMethod();
}

// 具體產品
public class ConcreteProductA extends Product {
    public void specificMethod() { /* 實現 A */ }
}

public class ConcreteProductB extends Product {
    public void specificMethod() { /* 實現 B */ }
}

// 抽象工廠
public abstract class Creator {
    public abstract <T extends Product> T createProduct(Class<T> clazz);
}

// 具體工廠(反射實現通用創建)
public class ConcreteCreator extends Creator {
    public <T extends Product> T createProduct(Class<T> clazz) {
        try {
            return clazz.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            throw new RuntimeException("創建產品失敗", e);
        }
    }
}

// 客戶端使用
public class Client {
    public static void main(String[] args) {
        Creator creator = new ConcreteCreator();
        Product product = creator.createProduct(ConcreteProductA.class);
        product.specificMethod();
    }
}

四大核心優勢

  1. 封裝性強:調用者只需知道類名,無需關心複雜創建過程,降低模塊耦合
  2. 擴展性優:新增產品只需擴展工廠類,符合開閉原則
  3. 屏蔽具體實現:調用者依賴抽象接口,具體實現變更不影響上層
  4. 經典解耦框架:符合迪米特法則、依賴倒置、里氏替換等設計原則

實戰應用場景

  • JDBC DriverManager.getConnection() - 根據 URL 創建不同數據庫連接
  • 日誌框架 LoggerFactory.getLogger() - 適配不同日誌實現
  • 集合框架 Collections.synchronizedList() - 創建線程安全包裝器
  • Spring BeanFactory - 核心 IOC 容器即工廠方法模式體現

變體:參數化工廠方法

public class ShapeFactory {
    public Shape createShape(String type) {
        switch (type.toLowerCase()) {
            case "circle": return new Circle();
            case "rectangle": return new Rectangle();
            default: throw new IllegalArgumentException("未知形狀: " + type);
        }
    }
}

通過參數決定創建哪種產品,適用於產品類型固定、數量較少的場景。

總結

工廠方法模式通過「定義接口、子類實例化」將對象創建與使用解耦,是企業級開發中最高頻、最實用的創建型模式之一。掌握其精髓:面向抽象編程,封裝變化,延遲綁定。

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