日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Factory Method工厂方法模式

發布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。