簡單工廠,抽象工廠,工廠模式三者的對照

簡單工廠,抽象工廠,工廠模式三者的對照

做者: TindleWei
博客: http://blog.csdn.net/mennoa(轉載請說明出處)
GitHub: https://github.com/TindleWei git

我想你們都熟悉工廠模式,但是要分清簡單工廠。抽象工廠。工廠模式可能就沒那麼easy了。因此我查看了不少資料以及設計模式關於工廠模式的介紹,如下來總結一下。github

前言

簡單工廠,抽象工廠。工廠模式都屬於建立型模式。設計模式

該模式的特色是抽象了實例化的過程。它們幫助了一個系統獨立於怎樣建立、組合和表示它的那些對象。markdown

其有兩個明顯特徵:
1. 它們都將關於系統使用哪些詳細的類的信息封裝了起來。工具


2. 他們隱藏了這些實例是怎樣被建立和放在一塊兒的。 .net

分類

  • 第一種分法:3種

    這是通常的狀況,工廠模式分爲三種:設計

    • 簡單工廠模式對象

      簡單工廠模式的工廠類一般是使用靜態方法,經過接收的參數的不一樣來返回不一樣的對象實例。blog


      不改動代碼的話。是沒法擴展的。接口

    • 抽象工廠模式

      別名:Virtual Constructor
      提供一個建立一系列相關或相互依賴對象的接口。而無需指定它們詳細的類。

      簡單說就是將對象的聲明和實現分離。

    • 工廠方法模式

      別名:Kit
      定義一個用於建立對象的接口,讓子類決定實例化哪個類。簡單說使一個類的實例化延遲到其子類。

  • 另一種分法:2種

    依據 GOF 的經典之做 《設計模式》,其將工廠模式分爲兩種:

    • 工廠方法模式

    • 抽象工廠模式

    而簡單工廠模式被納入 工廠方法模式,看作一種特例。

    簡單工廠模式的工廠類一般是使用靜態方法。經過接收的參數的不一樣來返回不一樣的對象實例。

    常常會看到其工廠中依據參數不一樣switch。返回不一樣的產品。

  • 第三種分法:4種

    另外一種說法,除了上面的三種,還有個 靜態工廠模式
    好比項目中的工具類,TextUtil.isEmpty等。類+靜態方法

特色

  • 工廠方法模式:

    一個抽象產品類,可以派生出多個詳細產品類。


    一個抽象工廠類。可以派生出多個詳細工廠類。
    每個詳細工廠類僅僅能建立一個詳細產品類的實例。

  • 抽象工廠模式:

    多個抽象產品類,每個抽象產品類可以派生出多個詳細產品類。


    一個抽象工廠類,可以派生出多個詳細工廠類。


    每個詳細工廠類可以建立多個詳細產品類的實例。

差異

  • 簡單工廠 : 用來生產同一等級結構中的隨意產品。

    (對於添加新的產品,無能爲力)

  • 工廠方法 :用來生產同一等級結構中的固定產品。(支持添加隨意產品)

  • 抽象工廠 :用來生產不一樣產品族的全部產品。(對於添加新的產品。無能爲力;支持添加產品族)

工廠方法模式僅僅有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的詳細工廠類僅僅能建立一個詳細產品類的實例,而抽象工廠模式可以建立多個

討論


用一個系統建立的那些對象的類對系統進行參數化有兩種常常用法。

一種是生成建立對象的子類,如工廠方法模式。

但假設要改變產品類,就需要建立新的子類。

另外一種對系統進行參數化的方法不少其它的依賴於對象的複合:定義一個新的工廠對象負責建立產品對象。

假設是工廠方法模式。全部的產品都來自於抽象產品這一個父類,經過參數的不一樣建立不一樣的子類。

而抽象工廠方法,每個分類的產品都有一個該類產品的父類。每類對象分別建立並組合。

一般咱們使用的也是最簡單的工廠方法模式。做爲一種標準的建立對象的方法。

但是當被實例化的類根本不發生變化或當實例化出現在子類 可以很是easy定義的操做中,如初始化操做,這就並沒必要要了。

參考


《設計模式 可複用面向對象軟件的基礎》 –GOF

http://zyjustin9.iteye.com/blog/2094960

http://lh-kevin.iteye.com/blog/1981574

http://blog.csdn.net/hitwhylz/article/details/40381721

http://blog.csdn.net/jason0539/article/details/23020989

http://blog.csdn.net/jason0539/article/details/23020989

相關文章
相關標籤/搜索