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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

创建相似对象,就交给『工厂模式』吧

發布時間:2023/12/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建相似对象,就交给『工厂模式』吧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

源碼:

源代碼C#

系列導航:

目錄

定義(Factory Pattern):

用來創建目標對象的類,將相似對象的創建工作統一到一個類來完成。

一、簡單工廠模式:

代碼:

/// <summary>/// 產品枚舉/// </summary>public enum ProductEnum{ConcreateProductA,ConcreateProductB}/// <summary>/// 簡單工廠模式:/// 簡單工廠模式的工廠類一般是使用靜態方法,通過接收的參數的不同來返回不同的對象實例。/// 不修改代碼的話,是無法擴展的。(如果增加新的產品,需要增加工廠的Swith分支)/// 不符合【開放封閉原則】/// </summary>public static class SimpleFactory{public static AbstractCar Create(ProductEnum productType){switch (productType){case ProductEnum.ConcreateProductA:return new ConcreateCarA();case ProductEnum.ConcreateProductB:return new ConcreateCarB();default:return null;}}} /// <summary>/// 測試簡單工廠模式/// </summary>private static void TestSimpleFactory(){Console.WriteLine("簡單工廠模式:");var productA = SimpleFactory.Create(ProductEnum.ConcreateProductA);productA.GetInfo();Console.ReadLine();}

優缺點:

工廠類包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類。對于客戶端來說,去除了對具體產品的依賴。
不符合【OCP】。

應用場景:

當工廠類負責創建的對象比較少時可以考慮使用簡單工廠模式。


二、反射工廠模式(基于簡單工廠模式的拓展)

通過反射,以完成工廠對對象的創建??梢宰畲笙薅鹊慕怦?。

代碼:

/// <summary>/// 反射工廠模式/// 是針對簡單工廠模式的一種改進/// </summary>public static class ReflectFactory{public static AbstractCar Create(string typeName){Type type = Type.GetType(typeName, true, true);var instance = type?.Assembly.CreateInstance(typeName) as AbstractCar;return instance;}} /// <summary>/// 測試反射工廠模式/// </summary>private static void TestReflectFactory(){Console.WriteLine("反射工廠模式:");var productB = ReflectFactory.Create("FactoryPattern.ConcreateCarB");productB.GetInfo();Console.ReadLine();}

PS:反射工廠模式可以和配置文件配合使用,效果更佳


三、工廠方法模式

定義:

定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法將類的實例化延長到子類。

類圖:

啟示:

工廠方法是針對每一種產品提供一個工廠類。通過不同的工廠實例來創建不同的產品實例。在同一等級結構中,支持增加任意產品。

代碼:

/// <summary>/// 工廠方法模式:/// 工廠方法是針對每一種產品提供一個工廠類。通過不同的工廠實例來創建不同的產品實例。/// 在同一等級結構中,支持增加任意產品。/// 符合【開放封閉原則】,但隨著產品類的增加,對應的工廠也會隨之增多/// </summary>public interface IFactoryMethod{AbstractCar Create();}public class ConcreateFactoryA:IFactoryMethod{public AbstractCar Create(){return new ConcreateCarA();}}public class ConcreateFactoryB : IFactoryMethod{public AbstractCar Create(){return new ConcreateCarB();}} /// <summary>/// 測試工廠方法模式/// </summary>private static void TestFactoryMethod(){Console.WriteLine("工廠方法模式:");IFactoryMethod factoryB =new ConcreateFactoryB();var productB = factoryB.Create();productB.GetInfo();Console.ReadLine();}

優缺點:

符合【OCP】,但隨著產品類的增加,對應的工廠類也會隨之增多。
工廠方法模式實現時,客戶端需要決定實例化哪個工廠來創建對象。工廠方法把簡單工廠的內部創建對象的邏輯判斷移到了客戶端。如果需要修改,只需要修改客戶端即可!

應用場景:

單一產品的創建。


三、抽象工廠模式

定義:

為創建一組相關或相互依賴的對象提供一個接口,而且無需指定它們的具體類。

類圖:

啟示:

抽象工廠是應對產品族概念的,比如說,每個汽車公司可能要同時生產轎車,貨車,客車,那么每一個工廠都要有創建轎車,貨車和客車的方法。

代碼:

/// <summary>/// 抽象工廠模式:/// 抽象工廠是應對產品族概念的,比如說,每個汽車公司可能要同時生產轎車,貨車,客車,那么每一個工廠都要有創建轎車,貨車和客車的方法。/// 應對產品族概念而生,增加新的產品線很容易,但是無法增加新的產品。/// </summary>public interface IAbstractFactory{AbstractCar CreateCar();AbstractBus CreateBus();}/// <summary>/// 寶馬工廠/// </summary>public class BMWFactory:IAbstractFactory{public AbstractCar CreateCar(){return new ConcreateCarA();}public AbstractBus CreateBus(){return new ConcreateBusA();}}/// <summary>/// 比亞迪工廠/// </summary>public class BYDFactory : IAbstractFactory{public AbstractCar CreateCar(){return new ConcreateCarB();}public AbstractBus CreateBus(){return new ConcreateBusB();}} /// <summary>/// 測試抽象工廠模式/// </summary>private static void TestAbstractFactory(){Console.WriteLine("抽象工廠模式:");var bmwFactory = new BMWFactory();bmwFactory.CreateCar().GetInfo();bmwFactory.CreateBus().GetInfo();var bydFactory = new BYDFactory();bydFactory.CreateCar().GetInfo();bydFactory.CreateBus().GetInfo();Console.ReadLine();}

優缺點:

應對產品族概念而生,增加新的產品線很容易,但是無法增加新的產品。

應用場景:

一個系統不要求依賴產品類實例如何被創建、組合和表達的表達,這點也是所有工廠模式應用的前提。
這個系統有多個系列產品,而系統中只消費其中某一系列產品
系統要求提供一個產品類的庫,所有產品以同樣的接口出現,客戶端不需要依賴具體實現。


總結:

簡單工廠:簡單實用,但違反開放封閉;
工廠方法:開放封閉,單一產品;
抽象工廠:開放封閉,多個產品;
反射工廠:可以最大限度的解耦。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的创建相似对象,就交给『工厂模式』吧的全部內容,希望文章能夠幫你解決所遇到的問題。

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