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