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

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

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

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

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

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

    原因很簡單:解耦。

    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來解析。這樣,假設我以后要修改水果的路徑,修改一個文件就可以了。

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲国产天堂久久综合网站 | 欧美zozozo人禽交免费大片 | 色色色色色色网 | 激情五月激情综合网 | 久99re视频9在线观看 | www在线视频在线播放 | 日本r级在线观看播放 | 免费观看成人久久网免费观看 | 成 人 免费观看网站 | 欧美激情首页 | 老司机午夜免费福利 | 小明www永久在线看 小明爱看看永久成人免费平台 | 久久五月天婷婷 | 日日舔夜夜摸 | 欧美日韩成人高清在线播放 | 国产乱视频 | 欧美一二三区在线 | 免费一级特黄视频 | 中国成人免费视频 | 精品国产91久久久久 | 在线观看国产视频 | 欧美大胆性生话 | 成年人黄色小视频 | 亚洲免费毛片 | 亚洲欧美综合 | 午夜视频在线免费观看 | 日韩精品第一区 | 国产高清在线精品免费 | 成人小视频在线观看 | 亚洲一区二区三区在线免费观看 | 亚洲欧美高清在线 | 2020天堂中文字幕一区在线观 | 日日摸人人看97人人澡 | 色噜噜狠狠狠色综合久 | 日韩国产中文字幕 | 日本福利一区 | 成人精品一区二区不卡视频 | 粉色污视频 | 日本乱人伦片中文三区 | 婷婷激情小说网 | 性欧美videofree高 |