設計模式(一) 工廠模式

2021-07-11 22:02:52 字數 2050 閱讀 7291

在物件導向程式設計中, 最通常的方法是乙個new操作符產生乙個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說, 許多態別物件的創造需要一系列的步驟: 你可能需要計算或取得物件的初始設定; 選擇生成哪個子物件例項; 或在生成你需要的物件之前必須先生成一些輔助功能的物件。 在這些情況,新物件的建立就是乙個 「過程」,不僅是乙個操作,像一部大機器中的乙個齒輪傳動。

模式的問題:你如何能輕鬆方便地構造物件例項,而不必關心構造物件例項的細節和複雜過程呢?

解決方案

:建立乙個工廠來建立物件

。1)還沒有工廠時代:假如還沒有工業革命,如果乙個客戶要一款寶馬車,一般的做法是客戶去建立一款寶馬車,然後拿來用。

2)簡單工廠模式:後來出現工業革命。使用者不用去建立寶馬車。因為客戶有乙個工廠來幫他建立寶馬.想要什麼車,這個工廠就可以建。比如想要320i系列車。工廠就建立這個系列的車。即工廠可以建立產品。

3)工廠方法模式時代:為了滿足客戶,寶馬車系列越來越多,如320i,523i,30li等系列乙個工廠無法建立所有的寶馬系列。於是由單獨分出來多個具體的工廠。每個具體工廠建立一種系列。即具體工廠類只能建立乙個具體產品。但是寶馬工廠還是個抽象。你需要指定某個具體的工廠才能生產車出來。

4)抽象工廠模式時代:隨著客戶的要求越來越高,寶馬車必須配置空調。而且這空調必須對應給系列車才能使用。於是這個工廠開始生產寶馬車和需要的空調。

最終是客戶只要對寶馬的銷售員說:我要523i空調車,銷售員就直接給他523i空調車了。而不用自己去建立523i空調車寶馬車.

簡單工廠提供建立物件例項的功能,而無需關心起具體實現。

簡單工廠方法的內部主要實現的功能是:選擇合適的實現類來建立例項物件。而不是通過構造方法來進行建立物件例項,而是通過乙個產生物件例項的工廠來建立物件例項。

工廠方法模式:乙個抽象產品類,可以派生出多個具體產品類。   

乙個抽象工廠類,可以派生出多個具體工廠類。 

每個具體工廠類只能建立乙個具體產品類的例項。

抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。 

乙個抽象工廠類,可以派生出多個具體工廠類。 

每個具體工廠類可以建立多個具體產品類的例項。 

區別:工廠方法模式只有乙個抽象產品類,而抽象工廠模式有多個。

工廠方法模式的具體工廠類只能建立乙個具體產品類的例項,而抽象工廠模式可以建立多個。

簡單而言:

簡單工廠 即 把例項化物件放到乙個具體的工廠類中,通過工廠類中的getinstance(type)例項來獲取,其中工廠類中包含判斷的邏輯即你想例項化那種型別的產品物件;

工廠方法 即 把簡單工廠的工廠類變為抽象類,具體的物件例項化則有工廠的具體類去實現,每種具體工廠類則對應乙個具體的產品類,此時獲取可以通過反射機制來建立具體的例項物件;

抽象工廠 即 有多個產品抽象類,有乙個抽象工廠類,抽象工廠可以派生多個具體工廠,每個具體工廠可以建立多個具體的產品例項。

參見 優點

工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的資訊,決定究竟應該建立哪個具體類的物件.通過使用工廠類,外界可以從直接建立具體產品物件的尷尬局面擺脫出來,僅僅需要負責「消費」物件就可以了。而不必管這些物件究竟如何建立及如何組織的.明確了各自的職責和權利,有利於整個軟體體系結構的優化。 缺點

由於工廠類集中了所有例項的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了乙個工廠類中;它所能建立的類只能是事先考慮到的,如果需要新增新的類,則就需要改變工廠類了。

當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件建立不同例項的需求.這種對條件的判斷和對具體產品型別的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充套件非常不利;

這些缺點在工廠方法模式中得到了一定的克服。

使用場景

工廠類負責建立的物件比較少;

客戶只知道傳入工廠類的引數,對於如何建立物件(邏輯)不關心;

由於簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用。

設計模式 工廠設計模式 一

工廠設計模式 就是當我們需要批量建立多種型別的物件時 需要用到,主要分為三種形式 1 靜態工廠,也叫簡單工廠模式,就是你傳乙個型別我建立對應的型別,spring中主要用到的就是這種模式 不多說,直接上 通用的產品介面,product 這個看需求,也可以定義為抽象類,根據你的物件之間的關係來定的 pa...

設計模式(一) 工廠模式

設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使 編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合...

設計模式(一) 工廠模式

編寫出來是為了給別人 client 呼叫的 所以,為了簡化 的協作使用及管理維護,必須想盡辦法簡化 邏輯,實現必要的 分離 下面我分別介紹幾種工廠模式。我們使用手機來作為測試,首先上 圖 public class iphone public class huawei public class opp...