說明:
使用 class 的靜態方法,依不同條件,取得不同物件,並用取得的物件,做類似的事情。
缺點是要新增不同條件時,須修改到類別的靜態方法。
範例:
生產玩具車、玩具狗。
希望達成如下的效果
static void Main(string[] args)
{
Toy aa;
aa = ToyFactory.CreateToy("car");
aa.MakeToy();//製造了 玩具車
aa = ToyFactory.CreateToy("dog");
aa.MakeToy();//製造了 玩具狗
Console.ReadLine();
}
執行結果:製造了 玩具車
製造了 玩具狗
實現重點在於,將不同條件給靜態方法後(ToyFactory.CreateToy),靜態方法能回傳同類型的物件。
其餘程式碼
abstract class Toy
{
public abstract void MakeToy();
}
class ToyCar : Toy
{
public override void MakeToy()
{
Console.WriteLine("製造了 玩具車");
}
}
class ToyDog : Toy
{
public override void MakeToy()
{
Console.WriteLine("製造了 玩具狗");
}
}
class ToyFactory
{
public static Toy CreateToy(String cc)
{
Toy obj = null;
switch (cc)
{
case "car":
obj = new ToyCar();
break;
case "dog":
obj = new ToyDog();
break;
default:
throw new Exception("沒有這個類別");
}
return obj;
}
}
相關連結:設計模式整理列表
跟策略模式好像,只是策略模式是把整個class傳進去,簡單工廠是依照傳入參數才決定要用哪個class,
回覆刪除但除了這樣還有區別嗎? 我感覺還沒體會到這兩種策略模式的精隨QQ
若要新增一個class,
刪除簡單工廠模式,除了新增新的class外,還須修改用來判斷的那個class ToyFactory,
策略模式,只須新增新的class,策略模式的優點,不須動到原本的類別。
恩恩了解了! 感謝回復
刪除