一.爲何提出簡單工廠模式git
考慮一個簡單的軟件應用場景,一個生產月餅的工廠要生產不一樣類型的月餅(豆沙的,肉餡的,核桃餡的),如今咱們經過」訂單「就能夠生產不一樣類型的月餅,這種應用場景反映到程序上就可使用簡單工廠模式。github
二.簡單工廠模式的定義spa
簡單工廠模式(Simple Factory Pattern):又稱爲靜態工廠方法(Static Factory Method)模式,它屬於類建立型模式。在簡單工廠模式中,能夠根據參數的不一樣返回不一樣類的實例。簡單工廠模式專門定義一個類來負責建立其餘類的實例,被建立的實例一般都具備共同的父類。對象
三.模式結構繼承
簡單工廠通常包含三個角色:接口
Factory:工廠角色開發
工廠角色負責實現建立全部實例的內部邏輯get
Product:抽象產品角色產品
抽象產品角色是所建立的全部對象的父類,負責描述全部實例所共有的公共接口,抽象產品角色通常是一個接口或者抽象類。it
ConcreteProduct:具體產品角色
具體產品角色是建立目標,全部建立的對象都充當這個角色的某個具體類的實例。
四.模式分析
1.將對象的建立和對象自己業務處理分離能夠下降系統的耦合度,使得二者修改起來都相對容易。
2.在調用工廠類的工廠方法時,因爲工廠方法是靜態方法,使用起來很方便,可經過類名直接調用,並且只須要傳入一個簡單的參數便可,在實際開發中,還能夠在調用時將所傳入的參數保存在XML等格式的配置文件中,修改參數時無須修改任何源代碼。
3.簡單工廠模式最大的問題在於工廠類的職責相對太重,增長新的產品須要修改工廠類的判斷邏輯,這一點與開閉原則是相違背的(這一點能夠運用反射獲得改善)。
4.簡單工廠模式的要點在於:當你須要什麼,只須要傳入一個正確的參數,就能夠獲取你所須要的對象,而無須知道其建立細節。
五.簡單工廠的優勢
1.工廠類含有必要的判斷邏輯,能夠決定在何時建立哪個產品類的實例,客戶端能夠免除直接建立產品對象的責任,而僅僅「消費」產品;簡單工廠模式經過這種作法實現了對責任的分割,它提供了專門的工廠類用於建立對象。
2.客戶端無須知道所建立的具體產品類的類名,只須要知道具體產品類所對應的參數便可,對於一些複雜的類名,經過簡單工廠模式能夠減小使用者的記憶量。
3.經過引入配置文件,能夠在不修改任何客戶端代碼的狀況下更換和增長新的具體產品類,在必定程度上提升了系統的靈活性。
六.簡單工廠的缺點
1.因爲工廠類集中了全部產品建立邏輯,一旦不能正常工做,整個系統都要受到影響。
2.使用簡單工廠模式將會增長系統中類的個數,在必定程序上增長了系統的複雜度和理解難度。
3.系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能形成工廠邏輯過於複雜,不利於系統的擴展和維護。
4.簡單工廠模式因爲使用了靜態工廠方法,形成工廠角色沒法造成基於繼承的等級結構。
七.簡單工廠實例