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

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 Java設(shè)計(jì)模式之工廠模式

Java設(shè)計(jì)模式之工廠模式

更新時(shí)間:2020-09-11 15:34:55 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1735次


工廠模式作為設(shè)計(jì)模式的一種在開(kāi)發(fā)中被普遍使用,


其實(shí)應(yīng)該可以說(shuō)是最經(jīng)常使用的一種的了。


它的設(shè)計(jì)思想也是面向接口,如果細(xì)分下來(lái),可以分成兩種工廠模式


·工廠方法-Factory Method


·抽象工廠-Abstract Factory


今天先把Factory Method說(shuō)完,因?yàn)锳bstract Factory的實(shí)現(xiàn)跟Factory Method有點(diǎn)相似,為了區(qū)分我們還是明天再接著說(shuō)Abstract Factory。


工廠方法-Factory Method


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


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


所以下面我們統(tǒng)一用Factory Method來(lái)說(shuō)明吧。


舉例


講抽象原理不如直接上例子來(lái)的直接。


舉個(gè)簡(jiǎn)單的例子,現(xiàn)在需要獲得不同的顏色,在沒(méi)有使用Factory Method之前,我們的代碼看起來(lái)可能是這樣的


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


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


而且從使用者的抽象角度來(lái)說(shuō),新建對(duì)象是一個(gè)過(guò)程,而不是一個(gè)操作,使用者需要關(guān)心具體的實(shí)例化過(guò)程,和實(shí)例化的使用,這不是面向?qū)ο蟮暮盟悸贰?/p>


Factory Method可以解決這種問(wèn)題,它把使用者和實(shí)例的生產(chǎn)邏輯解耦,從而讓使用者只關(guān)心實(shí)例的使用過(guò)程。


Factory Method


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


interface Co·or{void paint();}


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


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


Factory


對(duì)于Factory來(lái)說(shuō),它負(fù)責(zé)具體的實(shí)例生產(chǎn)過(guò)程,


可以這么想象,我不關(guān)心Red實(shí)例是怎么來(lái)的,我只告訴Factory我要什么顏色,F(xiàn)actory交給我之后,我只需要調(diào)用paint()接口就行。


所以對(duì)于調(diào)用者來(lái)說(shuō),現(xiàn)在的代碼可能是這樣的,


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


現(xiàn)在看,是不是在調(diào)用者的代碼里完全沒(méi)有出現(xiàn)跟實(shí)例生產(chǎn)相關(guān)的代碼了?


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


現(xiàn)在來(lái)看看Factory的代碼,


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


為了簡(jiǎn)化代碼這里只列出了Red相關(guān)的引用。


so…這就是Factory Method的精髓所在,通過(guò)Factory把實(shí)例的生產(chǎn)過(guò)程隱藏起來(lái)。


但如果你想深一層,這樣的簡(jiǎn)易版Factory Method也會(huì)有問(wèn)題。


如果后面引入的顏色越來(lái)越多,Co·orFactory的代碼量就會(huì)變得越來(lái)越長(zhǎng),如果實(shí)例化的細(xì)節(jié)足夠復(fù)雜,那么Co·orFactory也會(huì)變成一個(gè)超級(jí)上帝類。


Factory Method的進(jìn)化版


為了避免Co·orFactory被迭代到超級(jí)上帝類,可以進(jìn)一步優(yōu)化代碼。


對(duì)于Factory來(lái)說(shuō),它只關(guān)心一件事情,就是生產(chǎn)實(shí)例,所以對(duì)于這部分的操作,可以抽象出來(lái)作為一個(gè)接口create(),


interface Factory{Co·or create();}


現(xiàn)在開(kāi)始,我們就可以拋棄Co·orFactory這個(gè)超級(jí)上帝類了,對(duì)于每種Co·or,可以有一個(gè)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();}}


這樣帶來(lái)的好處是,每當(dāng)需要引入新的Co·or實(shí)現(xiàn)時(shí),只需要新增一個(gè)類來(lái)實(shí)現(xiàn)Factory接口就可以,而不用再往Co·orFactory里塞代碼,


使用者的代碼會(huì)變成這樣,


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


相對(duì)于簡(jiǎn)單版的Factory Method,雖然多了一行代碼,但是靈活性不變,


即使需要修改co·or實(shí)例的具體實(shí)現(xiàn),也只需要修改FactoryRed成你需要的類就行。


總結(jié)


Factory Method是開(kāi)發(fā)的利器,


它可以很好的隔離使用者和生產(chǎn)者的邏輯,從而讓使用者能靈活的使用,也只需要關(guān)心對(duì)象能使用的操作,而不需要關(guān)心對(duì)象的生產(chǎn)過(guò)程。


當(dāng)你的代碼規(guī)模變到足夠大時(shí),就需要考慮將Factory進(jìn)一步解耦,用不同的Factory去生產(chǎn)對(duì)應(yīng)的實(shí)例。


如果是在一個(gè)團(tuán)隊(duì)里開(kāi)發(fā)的話,甚至可以通過(guò)這種方式把各個(gè)具體的Factory分散到不同的小組去讓大家各自實(shí)現(xiàn)。


java工廠設(shè)計(jì)模式


以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java設(shè)計(jì)模式之工廠模式”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产精品一区高清在线观看 | 久久国产精品一区二区三区 | 国产精品资源网站在线观看 | 天天色综合三 | 日本久久综合视频 | 欧美一及| 在线成人亚洲 | 国内精品伊人久久久影视 | 国产午夜精品福利视频 | 成人精品 | 手机看片久久国产免费不卡 | 青青国产成人久久91网 | 特级毛片全部免费播放a一级 | 亚洲国产一区二区a毛片日本 | 久久免费久久 | 五月开心婷婷 | 国产成年人网站 | 久久久久久夜精品精品免费 | jazzjazz国产精品久久 | 国产在线观看一区二区三区四区 | 亚洲综合狠狠99婷婷 | 高清一区二区亚洲欧美日韩 | 国产成人精品.一二区 | 国产日韩欧美精品 | 亚洲精品无人区一区二区三区 | 国产伦理一区 | 国产精品九九久久精品女同 | 日本免费人成黄页网观看视频 | 亚洲爱爱天堂 | 久久亚洲精中文字幕冲田杏梨 | 久久93精品国产91久久综合 | 欧美成人极品怡红院tv | 久久久久依人综合影院 | 日韩在线综合 | 欧美日韩高清一区二区三区 | 亚洲一区二区观看 | 久插视频| 四虎国产欧美成人影院 | 色成网| a毛片免费全部播放完整成 a毛片免费全部在线播放毛 | 色一级|