更新時間:2020-05-11 16:11:15 來源:動力節點 瀏覽2458次
簡單工廠模式是類的創建模式,又叫做靜態工廠方法模式。簡單工廠模式由一個工廠對象決定生產出哪一種產品類的實例。
為什么要使用簡單工廠模式
原因很簡單:解耦。
A對象如果要調用B對象,最簡單的做法就是直接new一個B出來。這么做有一個問題,假如C類和B類實現了同一個接口/繼承自同一個類,系統需要把B類修改成C類,程序不得不重寫A類代碼。如果程序中有100個地方new了B對象,那么就要修改100處。
這就是典型的代碼耦合度太高導致的"牽一發動全身"。所以,有一個辦法就是寫一個工廠IFactory,A與IFactory耦合,修改一下,讓所有的類都實現C接口并且IFactory生產出C的實例就可以了。
簡單工廠模式示例
以水果為例:
有兩個子類蘋果和葡萄:
有一個園丁,專門負責生產出各種水果:
想要什么水果就問園丁拿就好了:
程序這么寫優點就出來了:
1.用戶不自己去生產產品,只需要負責去拿自己需要的東西就好了,這樣用戶-->產品之間的耦合度就降低了
2.代碼模塊職責更明確了,有專門消費的模塊、有專門生產的模塊
改進
上面的代碼雖然實現了用戶-->產品之間的分離,但還是有一個問題,工廠并不知道有多少種產品,所以每一次新增產品的時候,都需要新增elseif分支,這樣是不是不便呢?所以我們又想了一個辦法,就是反射,園丁可以這么修改:
調用的地方可以寫成:
當然,這么寫其實也有一點點問題,假如有一天我的項目想進行一個重構,重整類路徑,包路徑,比方說生產Apple的地方有100處,豈不是要修改100處?當然不用,有以下三種方法推薦:
1.寫一個接口FruitPath,里面定義常量:
2.寫一個Fruit.properties文件,里面定義水果和類路徑的對應關系:
3.寫一個Fruit.xml文件,里面定義水果和類路徑的對應關系:
第一種方式不說了,第二種方式.properties可以用Java自帶的Properties類來解析,第三種方式.xml可以用DOM4J來解析。這樣,假設我以后要修改水果的路徑,修改一個文件就可以了。
從設計模式的角度講,這么修改也有很大的優點。現在不管我新增還是刪除水果,園丁(類工廠)都不用變了,只需要告訴工廠我需要哪種水果就夠了,工廠自然會給調用者返回。這種寫法,也是Spring的基礎。
最后說一點,希望大家明白,簡單工廠模式或者說工廠模式的關注點并不在于在工廠中是如何生產出來需要的類的,而在于將創建產品與消費產品分離。前面使用過if...elseif...else、反射,除了這些方法,還可以有別的方法可以創建產品,比如傳入一個具體產品的標識,根據這個標識去數據庫里面查詢。
簡單工廠模式在Java中的應用及解讀
以后每一篇文章盡可能地介紹設計模式在Java中的應用,因為我認為不是每種設計模式開發者都有機會可以用到,但是能在原有代碼中敏銳地看出這是一種什么設計模式,至少能說明對這種設計模式是理解了。這里講一下JDK中的簡單工廠模式。
JDK中的簡單工廠模式有很多應用,比較典型的比如線程池,具體可以參見Java多線程18:線程池。我們使用線程池的時候,可以使用ThreadPoolExecutor,根據自己的喜好傳入corePoolSize、maximumPoolSize、keepAliveTimem、unit、workQueue、threadFactory、handler這幾個參數,new出一個指定的ThreadPoolExecutor出來。
JDK給開發者提供了Executors這個類,可以讓用戶產生ThreadPoolExecutor和使用ThreadPoolExecutor分離開,比如可以讓Executors提供一個單線程的線程池Executors.newSingleThreadExecutor()、讓Executors提供一個無界線程池Executors.newCachedThreadPool()等,這樣,開發者可以不用關心線程池是如何去實現的,直接使用Executors方法提供給開發者的ThreadPoolExecutor就可以了。
工廠模式的優缺點
優點:
1.簡單優化了軟件體系結構,明確了各自功能模塊的職責和權利
2.通過工廠類,外界不需要直接創建具體產品對象,只需要負責消費,不需要關心內部如何創建對象
缺點:
1.改進前的簡單工廠模式全部創建邏輯都集中在一個工廠類中,能創建的類只能是考慮到的,如果需要添加新的類,就必須改變工廠類了
2.改進前的簡單工廠模式隨著具體產品的不斷增多,可能會出現共產類根據不同條件創建不同實例的需求,這種對條件的判斷和對具體產品類型的判斷交錯在一起,很難避免功能模塊的蔓延,對系統的維護和擴展不利
3.改進后的簡單工廠模式主要是使用反射效率會低一些
以上就是動力節點java培訓機構的小編針對“簡單工廠模式,Java工廠設計模式”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習