靜態工廠方法 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 釐米的比薩餅