文章出處
文章列表
namespace 設計模式之工廠方法模式 { /// <summary> /// 菜抽象類 /// </summary> public abstract class Food { // 輸出點了什么菜 public abstract void Print(); } /// <summary> /// 西紅柿炒雞蛋這道菜 /// </summary> public class TomatoScrambledEggs : Food { public override void Print() { Console.WriteLine("西紅柿炒蛋好了!"); } } /// <summary> /// 土豆肉絲這道菜 /// </summary> public class ShreddedPorkWithPotatoes : Food { public override void Print() { Console.WriteLine("土豆肉絲好了"); } } /// <summary> /// 抽象工廠類 /// </summary> public abstract class Creator { // 工廠方法 public abstract Food CreateFoddFactory(); } /// <summary> /// 西紅柿炒蛋工廠類 /// </summary> public class TomatoScrambledEggsFactory:Creator { /// <summary> /// 負責創建西紅柿炒蛋這道菜 /// </summary> /// <returns></returns> public override Food CreateFoddFactory() { return new TomatoScrambledEggs(); } } /// <summary> /// 土豆肉絲工廠類 /// </summary> public class ShreddedPorkWithPotatoesFactory:Creator { /// <summary> /// 負責創建土豆肉絲這道菜 /// </summary> /// <returns></returns> public override Food CreateFoddFactory() { return new ShreddedPorkWithPotatoes(); } } /// <summary> /// 客戶端調用 /// </summary> class Client { static void Main(string[] args) { // 初始化做菜的兩個工廠() Creator shreddedPorkWithPotatoesFactory = new ShreddedPorkWithPotatoesFactory(); Creator tomatoScrambledEggsFactory = new TomatoScrambledEggsFactory(); // 開始做西紅柿炒蛋 Food tomatoScrambleEggs = tomatoScrambledEggsFactory.CreateFoddFactory(); tomatoScrambleEggs.Print(); //開始做土豆肉絲 Food shreddedPorkWithPotatoes = shreddedPorkWithPotatoesFactory.CreateFoddFactory(); shreddedPorkWithPotatoes.Print(); Console.Read(); } } }
使用工廠方法實現的系統,如果系統需要添加新產品時,我們可以利用多態性來完成系統的擴展,對于抽象工廠類和具體工廠中的代碼都不需要做任何改動。例如,我們我們還想點一個“肉末茄子”,此時我們只需要定義一個肉末茄子具體工廠類和肉末茄子類就可以。而不用像簡單工廠模式中那樣去修改工廠類中的實現(具體指添加case語句)。具體代碼為:
/// <summary> /// 肉末茄子這道菜 /// </summary> public class MincedMeatEggplant : Food { /// <summary> /// 重寫抽象類中的方法 /// </summary> public override void Print() { Console.WriteLine("肉末茄子好了"); } } /// <summary> /// 肉末茄子工廠類,負責創建肉末茄子這道菜 /// </summary> public class MincedMeatEggplantFactory : Creator { /// <summary> /// 負責創建肉末茄子這道菜 /// </summary> /// <returns></returns> public override Food CreateFoddFactory() { return new MincedMeatEggplant(); } } /// <summary> /// 客戶端調用 /// </summary> class Client { static void Main(string[] args) { // 如果客戶又想點肉末茄子了 // 再另外初始化一個肉末茄子工廠 Creator minceMeatEggplantFactor = new MincedMeatEggplantFactory(); // 利用肉末茄子工廠來創建肉末茄子這道菜 Food minceMeatEggplant = minceMeatEggplantFactor.CreateFoddFactory(); minceMeatEggplant.Print(); Console.Read(); } }
文章列表
全站熱搜