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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory

發布時間:2025/7/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

幾點說明

  • 永遠不要糾結于在什么時候使用什么模式
  • 永遠不要糾結于什么模式適用于什么情景
  • 永遠不要去死記任何的模式
  • 并不是說,23種設計模式可以應付所有的問題,要知道,使用一種方法的時候,往往伴隨著新問題的出現
  • 只有最適合你當前所遇到問題的解決方案,而沒有最適合的設計模式,任何一種設計模式在應用的時候,都應該根據問題的實際情況去做適當的改變,不然一定會陷入設計模式的陷阱之中
  • ?

    三種工廠的說明

    簡單工廠(SimpleFactory):定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類或接口。

    工廠方法(FactoryMethod):定義一個用于創建對象的接口,讓子類決定實例化哪一個類,使一個類的實例化延遲到了子類。

    抽象工廠(AbstractFactory):提供一個創建一系列相關或相互依賴對象的接口,而無須指定它們的具體類。

    ?

    三種工廠的實現

    注意:Singleton.SingletonOperateClass_1/2/3/4/5/6 是使用之前寫的一個關于單例模式的筆記時創建的。

    簡單工廠的實現思路:在工廠類中,使用一個以「產品基類」作為返回值類型的方法,用于生產。這個方法需要有一個參數,用于表述需要創建的是哪一種「產品子類」。然后再在這個方法中進行判斷,以返回相應的對象。

    簡單工廠的好處:通過使用工廠方法來創建對象,可以有效的解決在創建對象時耦合性過高的問題。如果我在客戶類中,直接使用New來實例化產品類,那么,如果當我想使用另一種更好的類來替代之前的類的時候,我就得每一個客戶類中都去修改。而使用工廠方法,就可以做到只修改這一個方法,從而實現低耦合性。當然,簡單工廠的一個很致命的缺點,就是必須要知道傳入什么以及會傳出什么。這樣對于類的擴展不是十分的方便。

    「簡單工廠 - Simple Factory」 public static Singleton.OperateBase getSingletonOperateClass(int selected) {switch (selected) {case 1:return Singleton.SingletonOperateClass_1.Operate;case 2:return Singleton.SingletonOperateClass_2.Single;case 3:return Singleton.SingletonOperateClass_3.Operate;case 4:return Singleton.SingletonOperateClass_4.Operate;case 5:return Singleton.SingletonOperateClass_5.Operate;case 6:return Singleton.SingletonOperateClass_6.Operate;default:return null;} }

    工廠方法的實現思路:如果說,簡單工廠是使用傳入的參數來控制生成什么樣的子類來返回,從而在解決耦合性問題的同時,也帶來了不夠靈活的問題。那么工廠方法就是使用多個相應對象的工廠來返回實例化后的子類,而不是通過傳入參數來控制。

    這里根據一篇參考的文章中提出的方法,可以使用反射來解決工廠方法中,要使用哪種子類,以及解決簡單工廠中的傳入參數的問題。個人覺得十分的好!具體的實現方法,就是寫一個XML配置文件,或者干脆寫在app.config中,然后來讀取相應的節點,從而獲取到有關的參數信息。

    「工廠方法 - Factory Method」 /// <summary> /// Factory Mathod Interface /// </summary> public interface IFactory_A {Singleton.OperateBase getSingletonOperateClass(); } /// <summary> /// Factory Method 1 /// </summary> public sealed class OperateFactory_1: IFactory_A {public Singleton.OperateBase getSingletonOperateClass() {return Singleton.SingletonOperateClass_1.Operate;}}/// <summary>/// Factory Method 2/// </summary> public class OperateFactory_2: IFactory_A {public Singleton.OperateBase getSingletonOperateClass() {return Singleton.SingletonOperateClass_2.Single;} }

    抽象工廠的實現思路:如果說簡單工廠與工廠方法是對同一個問題的兩種不同的解決方法的話,抽象工廠就是解決一系列這種問題的方法。因為其主要的作用就是生產一系列相互依賴的對象,而不用去關心它們具體的實現。

    當然,抽象工廠相對于前兩種方法來說,也是有一點復雜的。而也正是從這種方法開始,使用設計模式就需要一個好的「設計」了,不然會很驚訝的發現,越用設計模式,所產生的問題越多、系統越復雜、可控性越差。

    這個模式的實現相對來說,還是比較直觀的。首先要有一個總的工廠接口或者抽象類(建議使用接口),這個接口就是在客戶類中,要實例化的那個模板。然后要有這個接口的多種不同的工廠實現類。具體有多少個實現類,這個要看你的系統需要而定。這些實現類都是用于實例化一系統的產品對象。也就是說,我們還要有一系列的產品對象用于實例化。我們首先要有這一系列產品對象的抽象類,然后再針對每一個系列創建相應的子類,當然,子類的數量以及內容還是要看你具體的需要了。

    「抽象工廠 - Abstract Factory」 public interface IFactory_A {ProductBass_1 getProduct_1();ProductBass_2 getProduct_2(); } public sealed class OperateFactory_1: IFactory_A {public static ProductBass_1 getProduct_1() {return new ProductClass_1_1();}public static ProductBass_2 getProduct_2() {return new ProductClass_2_1();} } public class OperateFactory_2: IFactory_A {public ProductBass_1 getProduct_1() {return new ProductClass_1_2();}public ProductBass_2 getProduct_2() {return new PorductClass_2_2();}}/// <summary> /// Description of ProductBass_1. /// </summary> public abstract class ProductBass_1 {} public class ProductClass_1_1: ProductBase_1 {public ProductClass_1_1() {} } public class ProductClass_1_2: ProductBase_1 {public ProductClass_1_2() {} } public abstract class ProductBass_2 {} public class ProductClass_2_1: ProductBase_2 {public ProductClass_2_1() {} } public class ProductClass_2_2: ProductBase_2 {public ProductClass_2_2() {} }

    三種工廠的區別

    ?

    相比較而言,簡單工廠在實現上是最簡單的,工廠方法在實現上,較簡單工廠更復雜一點,但在靈活性上,更好一些。而抽象工廠方法是這三種方法中,最復雜的一種,當然,其與之前兩種要解決的問題也有一定的區別。

    我們可以認為,抽象工廠的實現是依托于之前兩種方法的。我們也可以認為,抽象工廠是對之前兩種方法在創建一系列對象上不足的一個有效補充。

    如果說,在設計上做到極致,或整體項目比較小的話,在簡單工廠與工廠方法中,個人比較傾向于簡單工廠這種方式。因為其不用包含太多的子類。

    有文章指出,簡單工廠在內聚方面不夠充分。這在OOP方面,確實是簡單工廠的一個感傷。但是如果我們的換種思路去考慮的話,將工廠類看做是一個靜態不變對象,其也是一個高內聚的實現,因為其只有一個作用,就是生產……當然,這是有點阿Q了……

    ?

    參考

  • http://www.cnblogs.com/anlyren/archive/2008/01/25/simple_factory_pattern.html
  • http://www.cnblogs.com/anlyren/archive/2008/01/26/factory_method.html
  • http://www.cnblogs.com/terrylee/archive/2005/12/13/295965.html
  • http://www.cnblogs.com/terrylee/archive/2006/01/04/310716.html
  • http://www.cnblogs.com/shenfx318/archive/2007/01/09/614844.html
  • http://www.cnblogs.com/millen/archive/2009/02/13/1389974.html
  • 轉載于:https://my.oschina.net/skyler/blog/706183

    總結

    以上是生活随笔為你收集整理的『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory的全部內容,希望文章能夠幫你解決所遇到的問題。

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