大話設計模式之簡單原廠模式、抽象原廠模式及Factory 方法模式的比較

來源:互聯網
上載者:User

 
  簡單原廠模式、抽象原廠模式、Factory 方法模式,這三種原廠模式都屬於設計模式中的建立型模式,它們在形式和特點上也多少有些相似,其最終目的都是幫我們將對象的執行個體化部分取出來,進而最佳化系統架構,增強系統的擴充性,也就是說更好的體現開放封閉原則。

簡單原廠模式:

概念:

       簡單原廠模式是類的建立模式,又叫做靜態Factory 方法模式,是由一個工廠類根據傳入的參量決定建立出哪一種產品類的執行個體,涉及到工廠角色、抽象產品角色以及具體產品角色。

結構圖:

         

分析:

       一: 簡單工廠類是整個模式的關鍵所在,包含了必要的邏輯判斷,根據給定資訊,決定究竟應該建立哪個類的對象。用戶端可以免除直接建立產品對象的責任,而僅僅負責消費對象就可以了,這種做法就實現了對職責權利的分割,有利於最佳化結構。

      二:工廠類集中了所有執行個體的邏輯,違反了高內聚這一原則,它所能建立的類只能是事先考慮好的,如果一旦添加新的類就需要改變工廠類了;同時,當具體產品增多時,可能就會出現工廠類根據不同的條件建立不同執行個體的需求,這種對條件的判斷和對具體產品類型的判斷交錯在一起,容易產生錯誤,對系統的維護和擴充也不利。這些都在Factory 方法模式中得到改善。

Factory 方法模式: 概念:        又叫虛擬構造器模式或多態工廠,它先一個用於建立對象的介面,然後讓子類決定執行個體化哪一個類。也就是說Factory 方法讓一個類的執行個體化延遲到其子類。 結構圖:             分析:       一:在Factory 方法模式中,核心的工廠類不再負責所有產品的建立,而是將具體建立工作交給子類去完成,這就允許系統在不修改工廠角色的情況下,建立新的產品。       二:Factory 方法模式集中封裝了對象的建立,在更換對象時,不要做大的改變就可以實現,降低了客戶程式與產品對象的耦合,是簡單原廠模式的進一步抽象和推廣。抽象原廠模式: 概念:       提供一個建立一系列相關或相互依賴對象的介面,而無需指定它們的具體類。 結構圖:         其中:        AbstractProductA和AbstractProductB是兩個抽象產品,它們都有可能有兩種不同的實現。        Product1、Product2、Product3、Product4是對兩個抽象產品的具體分類的實現。       AbstractFactory抽象工廠介面,包含所有產品的建立的抽象方法。       ConcreteFactory1和ConcreteFactory2是具體工廠,實現產生抽象產品的方法,產生一個具體的產品。 分析:       一:易於交換產品系列,具體工廠類在一個應用中只需要初始化的時候出現一次,這就使改變一個應用的具體工廠變得容易,它只需要改變具體工廠即可使用不同產品配置。       二:讓具體的建立執行個體過程與用戶端分離,用戶端是通過它們的抽象介面操縱執行個體,產品具體類名也被具體工廠實現分離,不會出現在客戶代碼中。       三:對產品的擴充比較麻煩,費力,如果需要增加一個新產品,則要改動幾乎所有的工廠類。類執行個體圖: 簡單原廠模式:          

Factory 方法模式:

                       

抽象原廠模式:

                           

綜上比較:

產品族:屬於不同產品等級結構,但功能相互關聯的產品組成的集合。

簡單原廠模式:

產生同一等級中的任何產品

建立工廠,工廠的作用就是建立介面

工廠類包含必要邏輯判斷,根據用戶端的選擇動態執行個體化相關類

Factory 方法:

產生統一等級結構中的固定產品

只有一個抽象產品類,可以派生出多個具體的產品類

每個具體工廠類建立一個具體產品類的執行個體

把簡單工廠的內部邏輯判斷移到用戶端來實現,若要增加功能,修改用戶端代碼

客服簡單工廠違背的開放封閉原則,保持封裝對象建立過程的優點

抽象工廠:

用抽象工廠建立產品

生產不同產品族的全部產品

有多個抽象產品類,每個抽象產品類可以派生出多個具體的產品類

每個具體工廠類建立多個具體產品類的執行個體

       








聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.