静态工厂方法 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 厘米的比萨饼