簡單工廠模式(Simple Factory Pattern)屬於創建型設計模式之一。其核心優勢在於將物件實例化的邏輯判斷封裝於工廠類別中,根據客戶端傳入的條件動態建立對應的具體產品類別。這使得客戶端無需直接依賴具體產品類別,降低了耦合度,符合「依賴倒轉原則」。
在傳統開發中,客戶端若需直接實例化具體類別,便會與具體實現產生強耦合。簡單工廠模式透過引入工廠類別,讓客戶端僅與抽象產品介面打交道,實際實例化由工廠根據參數決定,達到「客戶端不需關心物件由哪個子類別實例化」的目的。
簡單工廠模式主要包含三個角色:

設計一個支援加、減運算的簡易計算機。結構如下:

///
/// 抽象運算類別
///
public abstract class Operation
{
public int NumberA { get; set; }
public int NumberB { get; set; }
public abstract int GetResult();
}
///
/// 加法運算
///
public class AddOperation : Operation
{
public override int GetResult() => NumberA + NumberB;
}
///
/// 減法運算
///
public class SubOperation : Operation
{
public override int GetResult() => NumberA - NumberB;
}
///
/// 簡單工廠類別
///
public class SimpleFactory
{
public static Operation CreateOperation(string operation)
{
return operation switch
{
"+" => new AddOperation(),
"-" => new SubOperation(),
_ => null
};
}
}
static void Main(string[] args)
{
Operation op1 = SimpleFactory.CreateOperation("+");
op1.NumberA = 10; op1.NumberB = 20;
Console.WriteLine("{0}+{1}={2}", op1.NumberA, op1.NumberB, op1.GetResult());
Operation op2 = SimpleFactory.CreateOperation("-");
op2.NumberA = 10; op2.NumberB = 20;
Console.WriteLine("{0}-{1}={2}", op2.NumberA, op2.NumberB, op2.GetResult());
Console.Read();
}

簡單工廠模式結構清晰、易於理解,適合產品類別較少且固定的場景。但其缺點在於違反「開放封閉原則」:新增產品類別時需修改工廠類別的判斷邏輯。實務上常作為工廠方法模式或抽象工廠模式的基礎演進。