說明:
使用 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,策略模式的優點,不須動到原本的類別。
恩恩了解了! 感謝回復
刪除