C#設計模式——工廠方法
阿新 • • 發佈:2020-11-04
一、概念:定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使一個類的例項化延遲到其子類。
二、程式碼實現
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(); } } }
三、工廠模式四要素
- 工廠介面。工廠介面是工廠方法模式的核心,與呼叫者直接互動用來提供產品。在實際程式設計中,有時候也會使用一個抽象類來作為與呼叫者互動的介面,其本質上是一樣的。
- 工廠實現。在程式設計中,工廠實現決定如何例項化產品,是實現擴充套件的途徑,需要有多少種產品,就需要有多少個具體的工廠實現。
- 產品介面。產品介面的主要目的是定義產品的規範,所有的產品實現都必須遵循產品介面定義的規範。產品介面是呼叫者最為關心的,產品介面定義的優劣直接決定了呼叫者程式碼的穩定性。同樣,產品介面也可以用抽象類來代替,但要注意最好不要違反里氏替換原則。
- 產品實現。實現產品介面的具體類,決定了產品在客戶端中的具體行為。