




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、工廠模式式是我們們最常用用的模式式了,著著名的JJivee論壇 ,就大大量使用用了工廠廠模式,工廠模模式在JJavaa程序系系統(tǒng)可以以說是隨隨處可見見。為什么工工廠模式式是如此此常用?因為工工廠模式式就相當(dāng)當(dāng)于創(chuàng)建建實例對對象的nnew,我們經(jīng)經(jīng)常要根根據(jù)類CClasss生成成實例對對象,如如A aa=neew AA() 工廠模模式也是是用來創(chuàng)創(chuàng)建實例例對象的的,所以以以后nnew時時就要多多個心眼眼,是否否可以考考慮實用用工廠模模式,雖雖然這樣樣做,可可能多做做一些工工作,但但會給你你系統(tǒng)帶帶來更大大的可擴(kuò)擴(kuò)展性和和盡量少少的修改改量。我們以類類Sammplee為例, 如果果我們要要創(chuàng)建SS
2、ampple的的實例對對象:Sampple sammplee=neew SSampple();可是,實實際情況況是,通通常我們們都要在在創(chuàng)建ssampple實實例時做做點初始始化的工工作,比比如賦值值 查詢詢數(shù)據(jù)庫庫等。首先,我我們想到到的是,可以使使用Saamplle的構(gòu)構(gòu)造函數(shù)數(shù),這樣樣生成實實例就寫寫成:Sampple sammplee=neew SSampple(參數(shù));但是,如如果創(chuàng)建建sammplee實例時時所做的的初始化化工作不不是象賦賦值這樣樣簡單的的事,可可能是很很長一段段代碼,如果也也寫入構(gòu)構(gòu)造函數(shù)數(shù)中,那那你的代代碼很難難看了(就需要要Reffacttor重重整)。為什么
3、說說代碼很很難看,初學(xué)者者可能沒沒有這種種感覺,我們分分析如下下,初始始化工作作如果是是很長一一段代碼碼,說明明要做的的工作很很多,將將很多工工作裝入入一個方方法中,相當(dāng)于于將很多多雞蛋放放在一個個籃子里里,是很很危險的的,這也也是有背背于Jaava面面向?qū)ο笙蟮脑瓌t則,面向向?qū)ο蟮牡姆庋b(Enccapssulaatioon)和和分派(Dellegaatioon)告告訴我們們,盡量量將長的的代碼分分派“切切割”成成每段,將每段段再“封封裝”起起來(減減少段和和段之間間偶合聯(lián)聯(lián)系性),這樣樣,就會會將風(fēng)險險分散,以后如如果需要要修改,只要更更改每段段,不會會再發(fā)生生牽一動動百的事事情。在本例中中
4、,首先先,我們們需要將將創(chuàng)建實實例的工工作與使使用實例例的工作作分開, 也就就是說,讓創(chuàng)建建實例所所需要的的大量初初始化工工作從SSampple的的構(gòu)造函函數(shù)中分分離出去去。這時我們們就需要要Facctorry工廠廠模式來來生成對對象了,不能再再用上面面簡單nnew Sammplee(參數(shù)數(shù))。還還有,如如果Saamplle有個個繼承如如MySSampple, 按照照面向接接口編程程,我們們需要將將Sammplee抽象成成一個接接口.現(xiàn)現(xiàn)在Saamplle是接接口,有有兩個子子類MyySammplee 和HHisSSampple .我們們要實例例化他們們時,如如下:Sampple myssam
5、pple=neww MyySammplee();Sammplee hiissaamplle=nnew HissSammplee();隨著項目目的深入入,Saamplle可能能還會生出很很多兒子子出來, 那那么我們們要對這這些兒子子一個個個實例化化,更糟糟糕的是是,可能能還要對對以前的的代碼進(jìn)進(jìn)行修改改:加入入后來生生出兒子子的實例例.這在在傳統(tǒng)程程序中是是無法避避免的.但如果你你一開始始就有意意識使用用了工廠廠模式,這些麻麻煩就沒沒有了.工廠方法法你會建建立一個個專門生生產(chǎn)Saamplle實例例的工廠廠:publlic claass Facctorrypuubliic sstattic Sam
6、mplee crreattor(intt whhichh)/gettClaass 產(chǎn)生SSampple 一般可可使用動動態(tài)類裝裝載裝入入類。iff (wwhicch=1)retturnn neew SSamppleAA();eelsee iff (wwhicch=2)retturnn neew SSamppleBB();那么在你你的程序序中,如如果要實實例化SSampple時時.就使使用Sampple sammpleeA=FFacttoryy.crreattor(1);這樣,在在整個就就不涉及及到Saamplle的具具體子類類,達(dá)到到封裝效效果,也也就減少少錯誤修修改的機(jī)機(jī)會,這這個原理理可以
7、用用很通俗俗的話來來比喻:就是具具體事情情做得越越多,越越容易范范錯誤.這每個個做過具具體工作作的人都都深有體體會,相相反,官官做得越越高,說說出的話話越抽象象越籠統(tǒng)統(tǒng),范錯錯誤可能能性就越越少.好好象我們們從編程程序中也也能悟出出人生道道理?呵呵呵.使用工廠廠方法 要注意意幾個角角色,首首先你要要定義產(chǎn)產(chǎn)品接口口,如上上面的SSampple,產(chǎn)品接接口下有有Sammplee接口的的實現(xiàn)類類,如SSamppleAA,其次次要有一一個faactoory類類,用來來生成產(chǎn)產(chǎn)品Saamplle,如如下圖,最右邊邊是生產(chǎn)產(chǎn)的對象象Sammplee:進(jìn)一步稍稍微復(fù)雜雜一點,就是在在工廠類類上進(jìn)行行拓展,
8、工廠類類也有繼繼承它的的實現(xiàn)類類conncreeteFFacttoryy了。抽象工廠廠工廠模模式中有有: 工工廠方法法(Faactoory Metthodd) 抽抽象工廠廠(Abbstrractt Faactoory).這兩個模模式區(qū)別別在于需需要創(chuàng)建建對象的的復(fù)雜程程度上。如果我我們創(chuàng)建建對象的的方法變變得復(fù)雜雜了,如如上面工工廠方法法中是創(chuàng)創(chuàng)建一個個對象SSampple,如果我我們還有有新的產(chǎn)產(chǎn)品接口口Sammplee2.這里假設(shè)設(shè):Saamplle有兩兩個cooncrretee類SaamplleA和和SammleBB,而SSampple22也有兩兩個cooncrretee類Saampll
9、e2AA和SaamplleB22那么,我我們就將將上例中中Facctorry變成成抽象類類,將共共同部分分封裝在在抽象類類中,不不同部分分使用子子類實現(xiàn)現(xiàn),下面面就是將將上例中中的Faactoory拓拓展成抽抽象工廠廠:publlic absstraact claass Facctorrypuubliic aabsttracct SSampple creeatoor();puubliic aabsttracct SSampple22 crreattor(Strringg naame); publlic claass SimmpleeFacctorry eexteendss Faactooryp
10、uubliic SSampple creeatoor().rretuurn neww SaamplleApuubliic SSampple22 crreattor(Strringg naame).retturnn neew SSampple22Apubllic claass BommbFaactoory exttendds FFacttoryypuubliic SSampple creeatoor().retturnn neew SSamppleBB puubliic SSampple22 crreattor(Strringg naame).retturnn neew SSampple22B從
11、上面看看到兩個個工廠各各自生產(chǎn)產(chǎn)出一套套Sammplee和Saamplle2,也許你你會疑問問,為什什么我不不可以使使用兩個個工廠方方法來分分別生產(chǎn)產(chǎn)Sammplee和Saamplle2? 抽象工廠廠還有另另外一個個關(guān)鍵要要點,是是因為 SimmpleeFacctorry內(nèi),生產(chǎn)SSampple和和生產(chǎn)SSampple22的方法法之間有有一定聯(lián)聯(lián)系,所所以才要要將這兩兩個方法法捆綁在在一個類類中,這這個工廠廠類有其其本身特特征,也也許制造造過程是是統(tǒng)一的的,比如如:制造造工藝比比較簡單單,所以以名稱叫叫SimmpleeFacctorry。在實際應(yīng)應(yīng)用中,工廠方方法用得得比較多多一些,而且是是和
12、動態(tài)態(tài)類裝入入器組合合在一起起應(yīng)用。舉例我們以JJivee的FoorummFacctorry為例例,這個個例子在在前面的的Sinngleetonn模式中中我們討討論過,現(xiàn)在再再討論其其工廠模模式:publlic absstraact claass ForrumFFacttoryy prrivaate staaticc Obbjecct iinittLocck = neew OObjeect();prrivaate staaticc Sttrinng cclasssNaame = comm.jiivessofttwarre.fforuum.ddataabasse.DDbFoorummFaccto
13、rry;pprivvatee sttatiic FForuumFaactoory facctorry = nuull; puubliic sstattic ForrumFFacttoryy geetInnstaancee(Auuthoorizzatiion autthorrizaatioon) /Iff noo vaalidd auuthoorizzatiion passsedd inn, rretuurn nulll.if (auuthoorizzatiion = nulll) reeturrn nnulll;/以下使使用了SSinggletton 單態(tài)模模式iif (facctorry =
14、 nnulll) synnchrroniizedd(innitLLockk) iif (facctorry = nnulll) . tryy /動態(tài)轉(zhuǎn)轉(zhuǎn)載類Cllasss c = CClasss.fforNNamee(cllasssNamme);ffacttoryy = (FoorummFacctorry)cc.neewInnstaancee();cattch (Exxcepptioon ee) rretuurn nulll;/NNow, 返回回 prroxyy.用來來限制授授權(quán)對fforuum的訪訪問rretuurn neww FoorummFacctorryPrroxyy(auuthoor
15、izzatiion, faactoory,ffacttoryy.geetPeermiissiionss(auuthoorizzatiion);/真正創(chuàng)創(chuàng)建foorumm的方法法由繼承承forrumffacttoryy的子類類去完成成.pubblicc abbstrractt Foorumm crreatteFoorumm(Sttrinng nnamee, SStriing desscriiptiion)tthroows UnaauthhoriizeddExccepttionn, FForuumAllreaadyEExisstsEExceeptiion;.因為現(xiàn)在在的Jiive是是通過數(shù)數(shù)據(jù)庫系
16、系統(tǒng)存放放論壇帖帖子等內(nèi)內(nèi)容數(shù)據(jù)據(jù),如果果希望更更改為通通過文件件系統(tǒng)實實現(xiàn),這這個工廠廠方法FForuumFaactoory就就提供了了提供動動態(tài)接口口:privvatee sttatiic SStriing claassNNamee = coom.jjiveesofftwaare.forrum.dattabaase.DbFForuumFaactoory;你可以使使用自己己開發(fā)的的創(chuàng)建fforuum的方方法代替替comm.jiivessofttwarre.fforuum.ddataabasse.DDbFoorummFacctorry就可可以.在上面的的一段代代碼中一一共用了了三種模模式,除除
17、了工廠廠模式外外,還有有Sinngleetonn單態(tài)模模式,以以及prroxyy模式,prooxy模模式主要要用來授授權(quán)用戶戶對foorumm的訪問問,因為為訪問fforuum有兩兩種人:一個是是注冊用用戶 一一個是游游客guuestt,那么么那么相相應(yīng)的權(quán)權(quán)限就不不一樣,而且這這個權(quán)限限是貫穿穿整個系系統(tǒng)的,因此建建立一個個prooxy,類似網(wǎng)網(wǎng)關(guān)的概概念,可可以很好好的達(dá)到到這個效效果. 看看Jaava寵寵物店中中的CaatallogDDAOFFacttoryy:publlic claass CattaloogDAAOFaactoory /* 本方法法制定一一個特別別的子類類來實現(xiàn)現(xiàn)DAO
18、O模式。* 具體體子類定定義是在在J2EEE的部部署描述述器中。*/puubliic sstattic CattaloogDAAO ggetDDAO() tthroows CattaloogDAAOSyysExxcepptioon CattaloogDAAO ccatDDao = nnulll;tryy IInittiallConntexxt iic = neew IInittiallConntexxt();/動態(tài)裝裝入CAATALLOG_DAOO_CLLASSS/可可以定義義自己的的CATTALOOG_DDAO_CLAASS,從而在在無需變變更太多多代碼/的前前提下,完成系系統(tǒng)的巨巨大變更更。SStriing claassNNamee =(Strringg) iic.llookkup(JNDDINaamess.CAATALLOG_DAOO_CLLASSS);ccatDDao = (CattaloogDAAO) Claass.forrNamme(cclasssNaame).neewInnstaancee(); ccatcch (NamminggExccepttionn nee) tthroow nnew CattaloogDAAOSyysExxcepptioo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度物流運輸借款協(xié)議方合同
- 二零二五年度航空航天用高溫合金委托生產(chǎn)協(xié)議
- 二零二五年度智能共享單車無償使用合同范本
- 2025年度門診部護(hù)士長聘任與管理服務(wù)合同
- 職業(yè)插畫師插畫設(shè)計服務(wù)合同
- 房地產(chǎn)經(jīng)紀(jì)人獨家代理合同書
- 產(chǎn)品創(chuàng)意與策劃流程手冊
- 歷史文物保護(hù)與遺址發(fā)掘試題及答案
- 人工智能輔助的智能環(huán)境保護(hù)監(jiān)測系統(tǒng)開發(fā)協(xié)議
- 大健康產(chǎn)業(yè)數(shù)字化健康服務(wù)平臺建設(shè)
- 中西醫(yī)結(jié)合腫瘤學(xué)試卷
- 一年級下冊勞動課教案5篇
- 特殊工種操作人員體檢表
- 常用橋牌詞語(中英文對照)
- 加盟招商方案PPT模板
- 中石油HSE培訓(xùn)試題集(共33頁)
- 雙碳視角看歐盟綠色新政政策篇
- 噴(烤)漆房VOCs治理設(shè)施日常運行臺賬
- 往復(fù)式壓縮機(jī)組單機(jī)試運方案
- 區(qū)域環(huán)境概況
- 爆破片面積計算
評論
0/150
提交評論