1. 程式人生 > 遊戲 >《NBA 2K22》公佈第六賽季“失重” 4月8日上線

《NBA 2K22》公佈第六賽季“失重” 4月8日上線

概述

簡單工廠模式又稱為靜態工廠方法(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();    // 輸出:喝可樂....

總結

簡單工廠模式是一種比較簡單的設計模式,呼叫方不需要更注物件建立的邏輯,它的優點也是它的缺點:將全部建立邏輯集中到了一個工廠類中。