模式概述:
UML類圖:
簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建出哪一個產品類的實例。由上圖可以看出,簡單工廠模式有工廠、抽象產品、具體產品三個角色。
- 工廠角色(Factory)
是簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。可被外界直接調用來創建產品對象
- 抽象產品角色(Product)
是簡單工廠模式所創建的所有產品對象的父類,它負責描述所有實例所共有的公共接口
- 具體產品角色(ConcreteProductA及ConcreteProductB)
是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例
應用場景:
光說不練假把式,下面試着用簡單工廠模式代碼實現一個模擬場景
首先,我們先將各種各樣的銀行卡抽象出來,實現一個BankCardHandle抽象類,然後每種卡處理實現一個類,並繼承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卡處理中");
}
然後,我們實現工廠角色HandleFactory,定義一個靜態方法生成BankCardHandle的實例
{
public static BankCardHandle CreateBankCardHandle(string type)
{
switch (type.ToUpper())
{
case "VISA":
return new VisaHandle();
case "MASTERCARD":
return new MasterCardHandle();
default:
return null;
}
}
到這裏,三個角色全部定義完成,下面看看客戶端調用的代碼實現
hd = HandleFactory.CreateBankCardHandle("VISA");
hd.HandleProcess();
hd = HandleFactory.CreateBankCardHandle("MASTERCARD");
hd.HandleProcess();
到此我們模擬的刷卡實現就完成了。
優勢劣勢:
在簡單工廠模式中,工廠類是整個模式的關鍵,其包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟創建哪個類的實例,外界可以不用去關注對象的創建,僅需要負責“消費”對象就可以了,明確區分了責任,有利於結構的優化。
不過,簡單工廠模式的缺點也提現在其工廠類上,該類集中了所有實例的創建邏輯,違反了高內聚的責任分配原則,當系統的具體產品類不斷增多時,工廠類中條件判斷過多,不利於擴展及維護,簡單工廠模式的這些缺點,利用工廠方法模式可以得到一定的克服。
未完待續....