黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 簡單工廠模式,Java工廠設計模式

簡單工廠模式,Java工廠設計模式

更新時間:2020-05-11 16:11:15 來源:動力節點 瀏覽2581次

    簡單工廠模式是類的創建模式,又叫做靜態工廠方法模式。簡單工廠模式由一個工廠對象決定生產出哪一種產品類的實例。

    為什么要使用簡單工廠模式

    原因很簡單:解耦。

    A對象如果要調用B對象,最簡單的做法就是直接new一個B出來。這么做有一個問題,假如C類和B類實現了同一個接口/繼承自同一個類,系統需要把B類修改成C類,程序不得不重寫A類代碼。如果程序中有100個地方new了B對象,那么就要修改100處。

    這就是典型的代碼耦合度太高導致的"牽一發動全身"。所以,有一個辦法就是寫一個工廠IFactory,A與IFactory耦合,修改一下,讓所有的類都實現C接口并且IFactory生產出C的實例就可以了。

    簡單工廠模式示例

    以水果為例:

簡單工廠模式,Java工廠設計模式

    有兩個子類蘋果和葡萄:

簡單工廠模式,Java工廠設計模式

    有一個園丁,專門負責生產出各種水果:

簡單工廠模式,Java工廠設計模式

    想要什么水果就問園丁拿就好了:

簡單工廠模式,Java工廠設計模式

    程序這么寫優點就出來了:

    1.用戶不自己去生產產品,只需要負責去拿自己需要的東西就好了,這樣用戶-->產品之間的耦合度就降低了

    2.代碼模塊職責更明確了,有專門消費的模塊、有專門生產的模塊

    改進

    上面的代碼雖然實現了用戶-->產品之間的分離,但還是有一個問題,工廠并不知道有多少種產品,所以每一次新增產品的時候,都需要新增elseif分支,這樣是不是不便呢?所以我們又想了一個辦法,就是反射,園丁可以這么修改:

簡單工廠模式,Java工廠設計模式

    調用的地方可以寫成:

簡單工廠模式,Java工廠設計模式

    當然,這么寫其實也有一點點問題,假如有一天我的項目想進行一個重構,重整類路徑,包路徑,比方說生產Apple的地方有100處,豈不是要修改100處?當然不用,有以下三種方法推薦:

    1.寫一個接口FruitPath,里面定義常量:

簡單工廠模式,Java工廠設計模式

    2.寫一個Fruit.properties文件,里面定義水果和類路徑的對應關系:

簡單工廠模式,Java工廠設計模式

    3.寫一個Fruit.xml文件,里面定義水果和類路徑的對應關系:

簡單工廠模式,Java工廠設計模式

    第一種方式不說了,第二種方式.properties可以用Java自帶的Properties類來解析,第三種方式.xml可以用DOM4J來解析。這樣,假設我以后要修改水果的路徑,修改一個文件就可以了。

    從設計模式的角度講,這么修改也有很大的優點?,F在不管我新增還是刪除水果,園?。惞S)都不用變了,只需要告訴工廠我需要哪種水果就夠了,工廠自然會給調用者返回。這種寫法,也是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培訓機構的小編針對“簡單工廠模式,Java工廠設計模式”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲性视频在线 | 羞羞视频免费观看网站 | 亚洲综合天堂网 | 三级在线观看视频 | 国产日韩精品一区在线不卡 | 亚洲欧美中日韩中文字幕 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | 啪啪网址大全 | 深爱激情五月婷婷 | 一级爱爱片 | 国产一区在线观看视频 | 免费午夜剧场 | 国产不卡高清 | 6080私人午夜性爽快影院 | 在线观看成人免费视频 | 毛片又大又粗又长又硬 | 91精品欧美综合在线观看 | 亚洲综合偷自成人网第页色 | 亚洲一区二区视频在线观看 | 黄在线观看在线播放720p | 午夜免费影院 | 天天射天天干 | xxxx日本性| 欧美一区二区三区四区视频 | 三级毛片在线免费观看 | 日韩精品一区二区三区国语自制 | 福利久草| 亚洲成精品动漫久久精久 | 免费看片的网址 | 综合欧美日韩一区二区三区 | 午夜影院私人 | 国产伦人伦偷精品视频 | 天天摸夜夜添久久精品麻豆 | 亚洲经典千人经典日产 | 天天影视涩香欲综合网 | 黄色录像免费观看 | 亚洲人成在线免费观看 | 福利片成人午夜在线 | 夜夜爽夜夜爱 | 日本一区二区免费在线观看 | 亚洲美女高清aⅴ视频免费 亚洲美女福利 |