1. 程式人生 > >設計模式----簡單工廠

設計模式----簡單工廠

簡單工廠模式並不是一個設計模式,更偏向於一種程式設計習慣, 至少不屬於23種設計模式。

但是經常被用到,而且思想簡單,可以說是工廠方法模式的一個引導,

這裡簡單介紹什麼是簡單工廠以及其優缺點

簡單工廠的定義:

簡單工廠模式(Simple Factory Pattern):又稱為靜態工廠方法(Static Factory Method)模式,它屬於類建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。

簡單工廠將物件的建立過程進行了封裝,使用者不需要知道具體的建立過程,只需要呼叫工廠類填入相應引數

即可獲取相應的物件

為什麼也叫靜態工廠方法呢?

因為使用簡單工廠的時候,通常不用建立簡單工廠類的類例項,沒有建立例項的必要。因此可以把簡單工廠類實現成一個工具類,直接使用靜態方法就可以了。即簡單工廠的方法通常是靜態的,所以也被稱為靜態工廠。

簡單工廠模式可以分為三種角色:

工廠(Creator):

簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類的建立產品類的方法可以被外界直接呼叫,建立所需的產品物件。

抽象產品(Product):

簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。

具體產品(Concrete Product):

是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。

該博主舉了個選衣服的例子我覺得簡單易懂,推薦一下:

優點:

  • 有利於整個軟體體系結構的優化。工廠類決定究竟應該建立哪個具體類的物件. 使用者不必管這些物件究竟如何建立及如何組織的, 呼叫工廠類填入引數即可.明確了各自的職責和權利
  • 減少使用者的記憶量, 客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可
  • 在一定程度上提高了系統的靈活性, 通過引入配置檔案,可以在不修改任何客戶端程式碼的情況下更換和增加新的具體產品類
  • 幫助封裝, 簡單工廠幫助我們實現了元件的封裝, 讓元件外部能真正面向介面程式設計

缺點:

  • 工廠類的職責相對過重,增加新的產品需要修改工廠類的判斷邏輯,這一點與開閉原則是相違背的,這是工廠類最大的問題
  • 一定程式上增加了系統的複雜度和理解難度, 使用簡單工廠模式將會增加系統中類的個數
  • 系統擴充套件困難, 新增新產品就不得不修改工廠邏輯,在產品型別較多時,這種對條件的判斷和對具體產品型別的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充套件非常不利;
  • 無法形成等級結構, 簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。

那麼什麼時候適合用簡單工廠模式呢?

  • 工廠類負責建立的物件比較少;
  • 客戶只知道傳入工廠類的引數,對於如何建立物件(邏輯)不關心, 想要完全封裝隔離具體實現,讓外部只能通過介面來操作封裝體,那麼可以選用簡單工廠
  • 如果想要把對外建立物件的職責集中管理和控制,可以選用簡單工廠

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

簡單工廠模式的要點在於:

當你需要什麼,只需要傳入一個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。