《NBA 2K22》公佈第六賽季“失重” 4月8日上線
阿新 • • 發佈:2022-04-07
概述
簡單工廠模式又稱為靜態工廠方法(Static Factory Method)模式,屬於類的建立型模式,通常根據一個條件(引數)來返回不同的類的例項。我們可以通過特定的類建立去建立新的物件,客戶端只需傳入特定的引數,而無需瞭解類的建立邏輯,即可得到所需要的物件。這種方式的好處在於:例項化誰?由特定的類說了算,不用對呼叫方暴露邏輯。如果後續的使用中,需要新增其他相似類別的物件時,只需要新增相似類和修改工廠類即可。
意圖
提供一個類,由它負責根據一定的條件建立某一具體類的例項
類圖
這裡以一個喝飲料的為例,分別有3個飲料:可樂(Cola)、橙汁(Orange)、蘇打水(SodaWater
),這3種飲料都繼承了飲料類(Drinks),我們不需要知道這些飲料是怎麼生產的,我們只需要對飲料工廠(DrinksFactory)說飲料的名稱,那麼工廠就會給我們相應的飲料,類圖如下所示:
程式碼
在這個示例中,相應的程式碼如下所示:
Drinks
/// <summary> /// 飲料 /// </summary> public class Drinks { /// <summary> /// 喝飲料 /// </summary> public virtual void Drink() { Console.WriteLine("喝飲料...."); } }
Cola
/// <summary>
/// 可樂
/// </summary>
public class Cola : Drinks
{
/// <summary>
/// 喝可樂
/// </summary>
public override void Drink()
{
Console.WriteLine("喝可樂....");
}
}
Orange
/// <summary> /// 橙汁 /// </summary> public class Orange : Drinks { /// <summary> /// 喝橙汁 /// </summary> public override void Drink() { Console.WriteLine("喝橙汁...."); } }
SodaWater
/// <summary>
/// 蘇打水
/// </summary>
public class SodaWater : Drinks
{
/// <summary>
/// 喝蘇打水
/// </summary>
public override void Drink()
{
Console.WriteLine("喝蘇打水");
}
}
DrinksFactory
/// <summary>
/// 飲料工廠
/// </summary>
public class DrinksFactory
{
/// <summary>
/// 提供飲料
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static Drinks GetDrinks(string name)
{
Drinks drinks = null;
switch (name)
{
case "cola":
drinks = new Cola();
break;
case "orange":
drinks = new Orange();
break;
case "soda":
drinks = new SodaWater();
break;
}
return drinks;
}
}
客戶端呼叫
Drinks drinks = null;
drinks = DrinksFactory.GetDrinks("cola"); //我要可樂
drinks.Drink(); // 輸出:喝可樂....
總結
簡單工廠模式是一種比較簡單的設計模式,呼叫方不需要更注物件建立的邏輯,它的優點也是它的缺點:將全部建立邏輯集中到了一個工廠類中。