大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

Java設計模式之工廠模式

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


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


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


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


·工廠方法-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这里只有精品 | 亚洲香蕉在线视频 | 久久97久久97精品免视看 | 在线观看日本中文字幕 | 夜夜躁日日躁狠狠久久 | 综合色爱 | 久久精品卫校国产小美女 | 成 人 黄 色 视频播放1 | 亚洲一区二区三区首页 | 美女很黄很黄免费的 | 日韩最新视频一区二区三 | 精品伊人久久大香线蕉网站 | 纯欧美一级毛片免费 | 国产一及毛片 | 亚洲一级毛片欧美一级说乱 | 亚洲精品成人网久久久久久 | 日韩日b| 超91精品手机国产在线 | 四虎网站最新地址 | 超乳w真性中出し冲田杏梨101 | 一级毛片片| 久久99久久精品97久久综合 | 国产91在线免费观看 | 国内精品久久久久久西瓜色吧 | 亚洲视频手机在线观看 | 久久天天丁香婷婷中文字幕 | 毛片一级在线观看 | 四虎影视国产精品婷婷 | 草莓视频caomei888 | 久久精品动漫99精品动漫 | 一级特黄牲大片免费视频 | se成人| 免费 黄 色 人成 视频 | 午夜精品在线免费观看 | 免费观看成人羞羞视频网站观看 | 99视频在线观看视频一区 | 人人综合| 91国在线视频 |