工廠方法模式定義創建對象的接口,由子類決定實例化哪個具體類。將對象創建延遲到子類,實現框架與業務解耦,是 Spring IOC、JDBC、日誌框架等基礎設施的核心設計。
ICar)。Sedan, SUV)。createProduct()。
// 產品接口
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();
}
}
| 模式 | 核心特點 | 擴展性 | 適用場景 |
|---|---|---|---|
| 簡單工廠 | 一個工廠類 + switch/if 判斷 | ❌ 修改工廠類違背開閉原則 | 產品固定、數量少、無頻繁擴展 |
| 工廠方法 | 一個抽象工廠 + 多個具體工廠 | ✅ 新增產品只需新增工廠類 | 框架層、插件化架構、需隔離創建邏輯 |
| 抽象工廠 | 工廠族:創建一族相關產品 | ✅ 支持產品族擴展 | 跨平台 UI、多數據庫支持、換膚系統 |