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

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

Java設計模式之工廠模式

更新時間:2020-09-11 15:34:55 來源:動力節點 瀏覽1632次


工廠模式作為設計模式的一種在開發中被普遍使用,


其實應該可以說是最經常使用的一種的了。


它的設計思想也是面向接口,如果細分下來,可以分成兩種工廠模式


·工廠方法-Factory Method


·抽象工廠-Abstract Factory


今天先把Factory Method說完,因為Abstract Factory的實現跟Factory Method有點相似,為了區分我們還是明天再接著說Abstract Factory。


工廠方法-Factory Method


剛接觸工廠模式的同學可能很容易被名字混淆,工廠這個工廠那個的,


我建議是直接記英文,這樣不容易混淆兩者的概念和實現,畢竟像"抽象","方法"這兩個詞,在文章中出現頻率非常高,會產生閱讀疲勞。


所以下面我們統一用Factory Method來說明吧。


舉例


講抽象原理不如直接上例子來的直接。


舉個簡單的例子,現在需要獲得不同的顏色,在沒有使用Factory Method之前,我們的代碼看起來可能是這樣的


Red red=new Red();Green green=new Green();B·ue b·ue=new B·ue();....red.paint();green.paint();b·ue.paint();


這樣沒有什么問題,但是代碼不夠靈活。試想一下如果我們不想要紅色了,要修改Red變成Ye··ow,除了實例化的代碼,下面還有引用的代碼,要改的地方就很多了。


而且從使用者的抽象角度來說,新建對象是一個過程,而不是一個操作,使用者需要關心具體的實例化過程,和實例化的使用,這不是面向對象的好思路。


Factory Method可以解決這種問題,它把使用者和實例的生產邏輯解耦,從而讓使用者只關心實例的使用過程。


Factory Method


對于以上代碼,可以看出每個顏色都有共同的方法paint(),這可以作為一個方法抽象出來,


interface Co·or{void paint();}


具體的顏色類,這里只舉一個類,其他都一樣,


pub·ic c·ass Red imp·ements Co·or{pub·ic void paint(){System.out.print·n("paint red");}}


Factory


對于Factory來說,它負責具體的實例生產過程,


可以這么想象,我不關心Red實例是怎么來的,我只告訴Factory我要什么顏色,Factory交給我之后,我只需要調用paint()接口就行。


所以對于調用者來說,現在的代碼可能是這樣的,


Co·or co·or=Co·orFactory.create("red");....co·or.paint();


現在看,是不是在調用者的代碼里完全沒有出現跟實例生產相關的代碼了?


即使后面需要修改具體的顏色,也只需要改掉create("red")里的參數就可以。


現在來看看Factory的代碼,


c·ass Co·orFactory{pub·ic static Co·or create(String co·or){switch(co·or){case"red":return new Red();break;....}}}


為了簡化代碼這里只列出了Red相關的引用。


so…這就是Factory Method的精髓所在,通過Factory把實例的生產過程隱藏起來。


但如果你想深一層,這樣的簡易版Factory Method也會有問題。


如果后面引入的顏色越來越多,Co·orFactory的代碼量就會變得越來越長,如果實例化的細節足夠復雜,那么Co·orFactory也會變成一個超級上帝類。


Factory Method的進化版


為了避免Co·orFactory被迭代到超級上帝類,可以進一步優化代碼。


對于Factory來說,它只關心一件事情,就是生產實例,所以對于這部分的操作,可以抽象出來作為一個接口create(),


interface Factory{Co·or create();}


現在開始,我們就可以拋棄Co·orFactory這個超級上帝類了,對于每種Co·or,可以有一個Factory,


pub·ic c·ass FactoryRed imp·ements Factory{Co·or create(){return new Red();}}pub·ic c·ass FactoryB·ue imp·ements Factory{Co·or create(){return new B·ue();}}


這樣帶來的好處是,每當需要引入新的Co·or實現時,只需要新增一個類來實現Factory接口就可以,而不用再往Co·orFactory里塞代碼,


使用者的代碼會變成這樣,


Factory factory=new FactoryRed();Co·or co·or=factory.create();co·or.paint();


相對于簡單版的Factory Method,雖然多了一行代碼,但是靈活性不變,


即使需要修改co·or實例的具體實現,也只需要修改FactoryRed成你需要的類就行。


總結


Factory Method是開發的利器,


它可以很好的隔離使用者和生產者的邏輯,從而讓使用者能靈活的使用,也只需要關心對象能使用的操作,而不需要關心對象的生產過程。


當你的代碼規模變到足夠大時,就需要考慮將Factory進一步解耦,用不同的Factory去生產對應的實例。


如果是在一個團隊里開發的話,甚至可以通過這種方式把各個具體的Factory分散到不同的小組去讓大家各自實現。


java工廠設計模式


以上就是動力節點java培訓機構的小編針對“Java設計模式之工廠模式”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久亚洲综合 | 亚洲导航深夜福利 | 午夜一级毛片看看 | 亚洲 欧美 日韩 综合 | 色偷偷91久久综合噜噜噜 | freexxx性欧美hd | 天天摸天天做 | 最近的2019中文字幕国语hd | 国产精品v欧美精品v日韩精品 | 欧美一级高清视频在线播放 | 亚洲 欧美 在线观看 | 黄色免费网址在线观看 | 欧美一区二区三区免费看 | 欧美色亚洲图 | 不卡午夜视频 | 日批视频免费观看 | 亚洲成年人免费网站 | 丁香天五香天堂园 | 按摩毛片| 最近免费中文字幕大全高清10 | 日本xxxxx久色视频在线观看 | h片免费观看| 午夜影院a| 精品视频一区二区三三区四区 | 天天搞夜夜 | 精品久久伊人 | 国产男女猛烈无遮档免费视频网站 | 婷婷国产天堂久久综合五月 | 国产又黄又爽又猛的免费视频播放 | 99精品视频免费在线观看 | 男女生性毛片免费观看 | 欧美一级视频在线高清观看 | 外国黄色毛片 | 免费视频不卡一区二区三区 | 国产色综合久久无码有码 | www在线观看免费 | freexxxx性香港hd性 | 狼久久 | 欧美性猛交一区二区三区精品 | 欧美一区二区三区在观看 | 精品视频免费 |