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

Java 設計模式全解析:簡單工廠、工廠方法與抽象工廠模式實戰對比

     編輯:Java 相關知識

前言:工廠模式三部曲

工廠模式核心在於「將物件建立邏輯封裝」,依複雜度分為三層:簡單工廠(條件判斷建立)、工廠方法(多型委派子類別)、抽象工廠(產品族建立)。前兩者為核心必修,抽象工廠適用於多產品族場景。

一、 簡單工廠模式(Simple Factory)

依傳入參數決定建立何種物件。範例以單例包裝工廠,示範 int 與 String 兩種多載判斷:

public class SimpleFactory {
    private static final SimpleFactory INSTANCE = new SimpleFactory();
    private SimpleFactory() {}
    public static SimpleFactory getInstance() { return INSTANCE; }

    public void factory(int type) {
        if (type == 1) System.out.println("KFC's chicken wing");
        else if (type == 2) System.out.println("McDonald's chicken wing");
        else System.out.println("no chicken wing");
    }
    public void factory(String type) { /* 字串判斷邏輯 */ }
}

進階應用:搭配配置檔(如 erp.cfg.properties)儲存實作類別全名,透過 Class.forName().newInstance() 動態載入,實現「修改配置即切換實作」的可維護性。

二、 工廠方法模式(Factory Method)

定義建立物件的介面,由子類別決定實例化哪個類別。範例以快餐店產出食物展示多型:

interface Store { Food makeFood(); }

class KFCStore implements Store {
    public Food makeFood() { return new Food("KFC wing"); }
}
class McDonaldStore implements Store {
    public Food makeFood() { return new Food("McDonald's hamburger"); }
}
class Food { String name; /* 建構子、getter/setter */ }

// 使用端
Store store = new KFCStore();
store.makeFood(); // 產出 KFC wing
// 新增必勝客只需新增類別實作 Store,不修改既有碼
class PizzaHut implements Store {
    public Food makeFood() { return new Food("Pizza Hut pizza"); }
}

優勢:符合開放封閉原則,擴充新產品只需新增類別,無需修改客戶端代碼。

三、 抽象工廠模式(Abstract Factory)

在工廠方法之上再包一層,用於建立「相關或相依物件的家族」。例如同時需要 FoodFactory(食物族)與 SoftFactory(軟體族),抽象工廠統一管理這些工廠的建立:

public abstract class AbstractFactory {
    public abstract FoodFactory createFoodFactory();
    public abstract SoftFactory createSoftFactory();
}
// 具體工廠實作略...

適用場景:系統有多個產品族,且一次只使用其中一族;產品族內部有相依關係需強制搭配使用。

三大模式選型速查表

模式核心特徵適用場景擴充性
簡單工廠集中式條件判斷產品類別少、固定、客戶端不關心建立細節低(修改工廠類別)
工廠方法多型委派子類別產品類別多、頻繁新增、需解耦客戶端與具體類別高(新增子類別)
抽象工廠建立產品族多產品族、族內產品強相依、跨平台 UI 元件庫等高(新增具體工廠)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved