做者: TindleWei
博客: http://blog.csdn.net/mennoa(轉載請說明出處)
GitHub: https://github.com/TindleWei git
我想你們都熟悉工廠模式,但是要分清簡單工廠。抽象工廠。工廠模式可能就沒那麼easy了。因此我查看了不少資料以及設計模式關於工廠模式的介紹,如下來總結一下。github
簡單工廠,抽象工廠。工廠模式都屬於建立型模式。設計模式
該模式的特色是抽象了實例化的過程。它們幫助了一個系統獨立於怎樣建立、組合和表示它的那些對象。markdown
其有兩個明顯特徵:
1. 它們都將關於系統使用哪些詳細的類的信息封裝了起來。工具
2. 他們隱藏了這些實例是怎樣被建立和放在一塊兒的。 .net
這是通常的狀況,工廠模式分爲三種:設計
簡單工廠模式對象
簡單工廠模式的工廠類一般是使用靜態方法,經過接收的參數的不一樣來返回不一樣的對象實例。blog
不改動代碼的話。是沒法擴展的。接口
抽象工廠模式
別名:Virtual Constructor
提供一個建立一系列相關或相互依賴對象的接口。而無需指定它們詳細的類。
簡單說就是將對象的聲明和實現分離。
工廠方法模式
別名:Kit
定義一個用於建立對象的接口,讓子類決定實例化哪個類。簡單說使一個類的實例化延遲到其子類。
依據 GOF 的經典之做 《設計模式》,其將工廠模式分爲兩種:
工廠方法模式
抽象工廠模式
而簡單工廠模式被納入 工廠方法模式,看作一種特例。
簡單工廠模式的工廠類一般是使用靜態方法。經過接收的參數的不一樣來返回不一樣的對象實例。
常常會看到其工廠中依據參數不一樣switch。返回不一樣的產品。
另外一種說法,除了上面的三種,還有個 靜態工廠模式:
好比項目中的工具類,TextUtil.isEmpty等。類+靜態方法
工廠方法模式:
一個抽象產品類,可以派生出多個詳細產品類。
一個抽象工廠類。可以派生出多個詳細工廠類。
每個詳細工廠類僅僅能建立一個詳細產品類的實例。
抽象工廠模式:
多個抽象產品類,每個抽象產品類可以派生出多個詳細產品類。
一個抽象工廠類,可以派生出多個詳細工廠類。
每個詳細工廠類可以建立多個詳細產品類的實例。
簡單工廠 : 用來生產同一等級結構中的隨意產品。
(對於添加新的產品,無能爲力)
工廠方法 :用來生產同一等級結構中的固定產品。(支持添加隨意產品)
抽象工廠 :用來生產不一樣產品族的全部產品。(對於添加新的產品。無能爲力;支持添加產品族)
工廠方法模式僅僅有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的詳細工廠類僅僅能建立一個詳細產品類的實例,而抽象工廠模式可以建立多個
用一個系統建立的那些對象的類對系統進行參數化有兩種常常用法。
一種是生成建立對象的子類,如工廠方法模式。
但假設要改變產品類,就需要建立新的子類。
另外一種對系統進行參數化的方法不少其它的依賴於對象的複合:定義一個新的工廠對象負責建立產品對象。
假設是工廠方法模式。全部的產品都來自於抽象產品這一個父類,經過參數的不一樣建立不一樣的子類。
而抽象工廠方法,每個分類的產品都有一個該類產品的父類。每類對象分別建立並組合。
一般咱們使用的也是最簡單的工廠方法模式。做爲一種標準的建立對象的方法。
但是當被實例化的類根本不發生變化或當實例化出現在子類 可以很是easy定義的操做中,如初始化操做,這就並沒必要要了。
http://zyjustin9.iteye.com/blog/2094960
http://lh-kevin.iteye.com/blog/1981574
http://blog.csdn.net/hitwhylz/article/details/40381721