簡單工廠模式(Simple Factory Pattern)屬於創建型設計模式之一,適用於業務邏輯相對單純、產品種類較少且固定的場景。它透過一個工廠類根據傳入參數決定實例化哪個具體產品類,將物件建立的邏輯封裝起來,讓客戶端無需關心具體建立細節。本文將以汽車製造為例,完整展示從介面定義到測試驗證的完整程式碼結構。
定義所有具體產品必須實作的共同行為契約。
package org.verphen.simpleFactory;
/**
* 抽象產品角色:汽車介面
* 定義汽車的基本操作:啟動與停止
*/
public interface ICar {
void run(); // 汽車啟動
void stop(); // 汽車停止
}
實作 ICar 介面,每個類別代表一種具體產品。
// Benz.java - 奔馳汽車
package org.verphen.simpleFactory;
public class Benz implements ICar {
@Override
public void run() {
System.out.println("奔馳啟動");
}
@Override
public void stop() {
System.out.println("奔馳停止");
}
}
// Ferrari.java - 法拉利汽車
package org.verphen.simpleFactory;
public class Ferrari implements ICar {
@Override
public void run() {
System.out.println("法拉利啟動");
}
@Override
public void stop() {
System.out.println("法拉利停止");
}
}
// Jaguar.java - 捷豹汽車
package org.verphen.simpleFactory;
public class Jaguar implements ICar {
@Override
public void run() {
System.out.println("捷豹啟動");
}
@Override
public void stop() {
System.out.println("捷豹停止");
}
}
核心邏輯所在,靜態工廠方法根據字串參數回傳對應的產品實例。
package org.verphen.simpleFactory;
/**
* 簡單工廠類別
* 透過靜態方法根據類型字串建立對應的汽車實例
*/
public class SimpleFactory {
/**
* 工廠方法:根據車型名稱回傳對應的汽車實例
* @param carType 車型名稱(不分大小寫)
* @return ICar 介面實例,找不到對應類型回傳 null
*/
public static ICar driveCar(String carType) {
if ("Benz".equalsIgnoreCase(carType)) {
return new Benz();
} else if ("Ferrari".equalsIgnoreCase(carType)) {
return new Ferrari();
} else if ("Jaguar".equalsIgnoreCase(carType)) {
return new Jaguar();
}
return null;
}
}
示範如何使用工廠建立物件並呼叫方法。
package org.verphen.simpleFactory;
/**
* 簡單工廠模式測試類別
*/
public class SimpleFactoryTest {
public static void main(String[] args) {
// 透過工廠建立捷豹汽車實例
ICar car = SimpleFactory.driveCar("Jaguar");
car.run(); // 輸出:捷豹啟動
car.stop(); // 輸出:捷豹停止
// 也可測試其他車型
// ICar car = SimpleFactory.driveCar("Benz");
// ICar car = SimpleFactory.driveCar("Ferrari");
}
}
簡單工廠模式最適合:產品種類較少且穩定、客戶端只需傳入參數即可獲得產品、不希望客戶端依賴具體類別的專案。實務上若預期產品類型頻繁擴充,建議改用工廠方法模式或抽象工廠模式以符合開放封閉原則。
簡單工廠模式雖非標準 GoF 23 種設計模式之一,但作為工廠模式家族的入門基礎,其核心思想——「將物件建立與使用分離」——貫穿所有創建型模式。理解本模式有助於進階學習更彈性的工廠方法與抽象工廠模式。