生活随笔
收集整理的這篇文章主要介紹了
Factory Method工厂方法模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 定義一個用于創建對象的接口,讓子類決定將哪一個類實例化。Factory Method使一個類的實例化延遲到其子類,屬于創建型模式
- 在此模式中,工廠父類負責定義創建產品對象的公共接口,而工廠子類負責生產具體的產品對象,使一個類的實例化延遲到其子類,由子類來確定實例化哪個具體的產品類。
[TestClass]public class UnitTest2{[TestMethod]public void TestMethod1(){//測試//當前只是實例化了工廠,工廠的產品還尚未實例化Creator creator = new ConcreteCreator();//調用了“工廠方法”后,產品這個對象才真正被實例化var product = creator.FactoryMethod();}}/// <summary>/// 產品抽象類 是子類ConcreteProduct的泛華/// </summary>public abstract class Product{}/// <summary>/// 具體的產品 繼承自 Product/// </summary>public class ConcreteProduct : Product{}/// <summary>/// 實例化工廠/// </summary>public abstract class Creator{/// <summary>/// 定義創建產品對象的公共接口/// </summary>/// <returns></returns>public abstract Product FactoryMethod();}public class ConcreteCreator : Creator{public override Product FactoryMethod(){Console.Write("具體對象的方法");return new ConcreteProduct();}}
案例
調用者只需要通過工廠獲取想要的對象,而不需要知道對象的創建具體細節,
參考用例,一家工廠可以生產TV,MP4,MP3等電子產品,這些電子產品都有播放功能。
namespace DesignPatterns.FactoryMethod
{public class Factory{/// <summary>/// 通過名稱決定實例化哪種子類對象/// </summary>/// <param name="name">對象名稱</param>/// <returns></returns>public Product GetProduct(string name){if (name.ToLower() == "tv")return new TV();if (name.ToLower() == "mp4")return new MP4();if (name.ToLower() == "mp3")return new MP3();throw new Exception("unknow product name");}public static void Test(){var factory = new Factory();var tv = factory.GetProduct("tv");tv.Play();var mp4 = factory.GetProduct("mp4");mp4.Play();}}public abstract class Product{public abstract void Play();}public class TV : Product{public override void Play(){Console.WriteLine("TV play");}}public class MP4 : Product{public override void Play(){Console.WriteLine("MP4 play");}}public class MP3 : Product{public override void Play(){Console.WriteLine("MP3 play");}}
}
實際運用
在具體的運用場景中比如日志存儲方式,有遠程TCP,UDP存儲,本地磁盤存儲,發郵件,這些具體的存儲方式,可以通過配置工廠方法中的種類,由調用者選擇具體哪種存儲方式;
工廠方法只適合統一的對象創建,就是子類和父類擁有相同的構造函數,如果構造函數不一,那么工廠方法將很難管理起這些子類。
查看github源碼
轉載于:https://www.cnblogs.com/sands/p/11460153.html
總結
以上是生活随笔為你收集整理的Factory Method工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。