靜態工廠方法 C.

靜態工廠方法是的變型工廠方法圖案。它用於建立物件而無需自己呼叫建構函式。

何時使用靜態工廠方法

  • 如果要為生成物件的方法指定有意義的名稱。
  • 如果你想避免過複雜的物件建立,請參閱 Tuple Msdn
  • 如果要限制建立的物件數(快取)
  • 如果要返回其返回型別的任何子型別的物件。

有一些缺點,如

  • 沒有公共或受保護建構函式的類無法在靜態工廠方法中初始化。
  • 靜態工廠方法與普通靜態方法類似,因此它們與其他靜態方法無法區分(這可能因 IDE 而異)

Pizza.cs

public class Pizza
{
    public int SizeDiameterCM
    {
        get;
        private set;
    }
         
    private Pizza()
    {
        SizeDiameterCM = 25;
    }

    public static Pizza GetPizza()
    {
        return new Pizza();
    }

    public static Pizza GetLargePizza()
    {
        return new Pizza()
        {
            SizeDiameterCM = 35
        };
    }

    public static Pizza GetSmallPizza()
    {
        return new Pizza()
        {
            SizeDiameterCM = 28
        };
    }

    public override string ToString()
    {
        return String.Format("A Pizza with a diameter of {0} cm",SizeDiameterCM);
    }
}

Program.cs 中

class Program
{
    static void Main(string[] args)
    {
        var pizzaNormal = Pizza.GetPizza();
        var pizzaLarge = Pizza.GetLargePizza();
        var pizzaSmall = Pizza.GetSmallPizza();

        String pizzaString = String.Format("{0} and {1} and {2}",pizzaSmall.ToString(), pizzaNormal.ToString(), pizzaLarge.ToString());
        Console.WriteLine(pizzaString);
    }
}

輸出

一個直徑 28 釐米的比薩餅和一個直徑 25 釐米的比薩餅和一個直徑 35 釐米的比薩餅