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

Java 設計模式精講:三大工廠模式演進與最佳實踐

     編輯:Java 綜合教學

工廠模式家族全景解析:從簡單工廠到抽象工廠的抽象演進

工廠模式核心意圖:為創建對象提供過渡接口,將實例化邏輯屏蔽隔離,提高系統靈活性。GoF 將其分為工廠方法與抽象工廠兩類,業界常補充簡單工廠作為特例。

一、簡單工廠模式(靜態工廠方法)

結構:工廠類(核心邏輯判斷)+ 抽象產品 + 具體產品

特點:一個具體工廠類決定創建哪個產品,違反開閉原則,新增產品需修改工廠代碼。適用於產品種類固定、較少的場景。

二、工廠方法模式(多態性工廠)

核心改進:引入抽象工廠角色,將實例化決策延遲到子類:

// 抽象產品
public interface Moveable { void run(); }

// 具體產品
public class Plane implements Moveable { public void run() { System.out.println("plane"); } }
public class Broom implements Moveable { public void run() { System.out.println("broom"); } }

// 抽象工廠
public abstract class VehicleFactory { abstract Moveable create(); }

// 具體工廠
public class PlaneFactory extends VehicleFactory { public Moveable create() { return new Plane(); } }
public class BroomFactory extends VehicleFactory { public Moveable create() { return new Broom(); } }

// 客戶端
VehicleFactory factory = new BroomFactory();
Moveable m = factory.create(); m.run();

優勢:符合開閉原則,新增產品只需新增工廠子類,無需修改現有代碼。劣勢:產品種類多時類爆炸,可結合簡單工廠合並同類產品。

三、抽象工廠模式(工具箱/產品族)

解決問題:多個產品等級結構(如 Vehicle、Weapon、Food),需創建相關/依賴對象族:

public abstract class AbstractFactory {
    public abstract Vehicle createVehicle();
    public abstract Weapon createWeapon();
    public abstract Food createFood();
}

public class DefaultFactory extends AbstractFactory {
    public Vehicle createVehicle() { return new Car(); }
    public Weapon createWeapon() { return new AK47(); }
    public Food createFood() { return new Apple(); }
}

關鍵差異:工廠方法針對「單一產品等級」,抽象工廠針對「多產品等級構成的產品族」。單產品族時退化為工廠方法。

四、模式選型決策表

維度簡單工廠工廠方法抽象工廠
工廠類型具體類抽象類/接口抽象類/接口
產品結構單一等級單一等級多等級(族)
擴展性差(修改工廠)好(新增子類)好(新增族)
適用場景產品固定少單產品多變體產品族一致性

五、實戰建議

  • 優先考慮工廠方法,平衡擴展性與複雜度
  • 產品族強關聯(如 UI 皮膚:Button+ScrollBar+Window)用抽象工廠
  • 簡單場景或框架內部可用簡單工廠,配合反射/配置文件減少修改
  • 依賴注入容器(Spring BeanFactory)本質是通用工廠實現

理解三者演進脈絡,本質是將「創建什麼」與「如何創建」解耦的不斷深化過程。

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