模式概述:
專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類,簡單工廠(Simple Factory)模式又稱為靜態工廠方法(Static Factory Method)模式,屬於類的創建型模式,但其不屬於23種GOF設計模式之一,通常它根據自變量的不同返回不同的類的實例。
UML類圖:
簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建出哪一個產品類的實例。由上圖可以看出,簡單工廠模式有工廠、抽象產品、具體產品三個角色。
- 工廠角色(Factory)
是簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。可被外界直接調用來創建產品對象
- 抽象產品角色(Product)
是簡單工廠模式所創建的所有產品對象的父類,它負責描述所有實例所共有的公共接口
- 具體產品角色(ConcreteProductA及ConcreteProductB)
是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例
應用場景:
光說不練假把式,下面試着用簡單工廠模式代碼實現一個模擬場景
現實生活中大家都習慣刷卡買單,卡的種類很多,VISA、MASTERCARD等等...下面我們寫代碼模擬刷卡處理
首先,我們先將各種各樣的銀行卡抽象出來,實現一個BankCardHandle抽象類,然后每種卡處理實現一個類,並繼承BankCardHandle

abstract
class BankCardHandle
{
public abstract void HandleProcess();
}
class VisaHandle : BankCardHandle
{
public override void HandleProcess()
{
Console.WriteLine( " VISA卡處理中 ");
}
}
class MasterCardHandle : BankCardHandle
{
public override void HandleProcess()
{
Console.WriteLine( " MASTERCARD卡處理中 ");
}
{
public abstract void HandleProcess();
}
class VisaHandle : BankCardHandle
{
public override void HandleProcess()
{
Console.WriteLine( " VISA卡處理中 ");
}
}
class MasterCardHandle : BankCardHandle
{
public override void HandleProcess()
{
Console.WriteLine( " MASTERCARD卡處理中 ");
}
然后,我們實現工廠角色HandleFactory,定義一個靜態方法生成BankCardHandle的實例

class HandleFactory
{
public static BankCardHandle CreateBankCardHandle( string type)
{
switch (type.ToUpper())
{
case " VISA ":
return new VisaHandle();
case " MASTERCARD ":
return new MasterCardHandle();
default:
return null;
}
}
{
public static BankCardHandle CreateBankCardHandle( string type)
{
switch (type.ToUpper())
{
case " VISA ":
return new VisaHandle();
case " MASTERCARD ":
return new MasterCardHandle();
default:
return null;
}
}
到這里,三個角色全部定義完成,下面看看客戶端調用的代碼實現

BankCardHandle hd;
hd = HandleFactory.CreateBankCardHandle( " VISA ");
hd.HandleProcess();
hd = HandleFactory.CreateBankCardHandle( " MASTERCARD ");
hd.HandleProcess();
hd = HandleFactory.CreateBankCardHandle( " VISA ");
hd.HandleProcess();
hd = HandleFactory.CreateBankCardHandle( " MASTERCARD ");
hd.HandleProcess();
到此我們模擬的刷卡實現就完成了。
優勢劣勢:
在簡單工廠模式中,工廠類是整個模式的關鍵,其包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟創建哪個類的實例,外界可以不用去關注對象的創建,僅需要負責“消費”對象就可以了,明確區分了責任,有利於結構的優化。
不過,簡單工廠模式的缺點也提現在其工廠類上,該類集中了所有實例的創建邏輯,違反了高內聚的責任分配原則,當系統的具體產品類不斷增多時,工廠類中條件判斷過多,不利於擴展及維護,簡單工廠模式的這些缺點,利用工廠方法模式可以得到一定的克服。
未完待續....