下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java的設(shè)計(jì)模式編程中責(zé)任鏈模式的運(yùn)用的實(shí)例講解Java的設(shè)計(jì)模式編程中責(zé)任鏈模式的運(yùn)用的實(shí)例講解定義:使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免了請(qǐng)求的發(fā)送 者和接收者之間的耦合關(guān)系。將這些對(duì)象連成一條鏈,并沿著這條 鏈傳遞該請(qǐng)求,直到有對(duì)象處理它為止。類型:行為類模式類圖:首先來(lái)看一段代碼:publicvoid test (inti, Reques trequest) if (il) Handlerl. re sponse (request) ; elseif (i=2) Handler2. response (request) ; e lseif (i=3) Handler3. respon
2、se (request) ; elseif (i4) Handle r4. response(request);elseHandlers, response (request);代碼的業(yè)務(wù)邏輯是這樣的,方法有兩個(gè)參數(shù):整數(shù)i和一個(gè)請(qǐng)求 request,根據(jù)i的值來(lái)決定由誰(shuí)來(lái)處理request,如果i=l,由 Handlerl來(lái)處理,如果i=2,由Handl er 2來(lái)處理,以此類推。在 編程中,這種處理業(yè)務(wù)的方法非常常見(jiàn),所有處理請(qǐng)求的類有 辻else條件判斷語(yǔ)句連成一條責(zé)任鏈來(lái)對(duì)請(qǐng)求進(jìn)行處理,相信 大家都經(jīng)常用到。這種方法的優(yōu)點(diǎn)是非常直觀,簡(jiǎn)單明了,并且比 較容易維護(hù),但是這種方法也存在著幾
3、個(gè)比較令人頭疼的問(wèn)題:代碼臃腫:實(shí)際應(yīng)用中的判定條件通常不是這么簡(jiǎn)單地判斷是 否為1或者是否為2,也許需要復(fù)雜的計(jì)算,也許需要查詢數(shù)據(jù)庫(kù) 等等,這就會(huì)有很多額外的代碼,如果判斷條件再比較多,那么這 個(gè)辻else語(yǔ)句基本上就沒(méi)法看了。耦合度高:如果我們想繼續(xù)添加處理請(qǐng)求的類,那么就要繼續(xù) 添加elseif判定條件;另外,這個(gè)條件判定的順序也是寫死的,如 果想改變順序,那么也只能修改這個(gè)條件語(yǔ)句。既然缺點(diǎn)我們己經(jīng)清楚了,就要想辦法來(lái)解決。這個(gè)場(chǎng)景的業(yè)務(wù) 邏輯很簡(jiǎn)單:如果滿足條件1,則由Handl er 1來(lái)處理,不滿足則向 下傳遞;如果滿足條件2,則由Handler2來(lái)處理,不滿足則繼續(xù)向 下傳遞
4、,以此類推,直到條件結(jié)束。其實(shí)改進(jìn)的方法也很簡(jiǎn)單,就 是把判定條件的部分放到處理類中,這就是責(zé)任連模式的原理。責(zé)任連模式的結(jié)構(gòu)責(zé)任連模式的類圖非常簡(jiǎn)單,它由一個(gè)抽象地處理類和它的一組 實(shí)現(xiàn)類組成:抽象處理類:抽象處理類中主要包含一個(gè)指向下一處理類的成 員變量nextHandler和一個(gè)處理請(qǐng)求的方法handRequest, handRequest方法的主要主要思想是,如果滿足處理的條件,則有 本處理類來(lái)進(jìn)行處理,否則由nextHandler來(lái)處理。具體處理類:具體處理類主要是對(duì)具體的處理邏輯和處理的適 用條件進(jìn)行實(shí)現(xiàn)。實(shí)例責(zé)任鏈模式有兩個(gè)角色:抽象處理者(Handler)角色:定義一個(gè)請(qǐng)求的接
5、口。如果需要 可以定義個(gè)一個(gè)方法用來(lái)設(shè)定和返回下家對(duì)象的引用。具體處理者(ConcreteHand 1 er)角色:如果可以處理就處理請(qǐng) 求,如果不能處理,就把請(qǐng)求傳給下家,讓下家處理。也就是說(shuō)它 處理自己能處理的.請(qǐng)求且可以訪問(wèn)它的下家。上述模式的測(cè)試代碼如下:packagechainOfResp;/*描述:抽象處理角色 */publicabstractclassHandlerprotectedHandlersuccessor;/* 描述:處理方法*/publicabstractvoidhandlerRequest(Stringcondition);publicH andlergetSucc
6、essor ()returnsuccessor;publicvoidsetSuccesso r (Handlersuccessor) this successor二successor;packagechainOfResp;/*描述:具體處理角色*/publicclassConcreteHandlerlextendsHandler0verr i depublie voidhandlerRequest (Stringcondition) /女口果是自己的責(zé)任,就 自己處理,負(fù)責(zé)傳給下家處理if (condition. equals (,zConcreteHandlerl/z) System. ou
7、t printin (/ConcreteHandlerlhandled/,) ;return;else System. out println (/zConcreteHandlerlpassedz,) ; getSuccessor () handlerRequest (co ndition);packagechainOfResp; /*描述:具體處理角色*/publicclassConcreteHandler2extendsHandler©Overr i depublie voidhandlerRequest (Stringcondition) /如果是自己的責(zé)任,就 自己處理,負(fù)責(zé)
8、傳給下家處理if (condition. equals (,zConcreteHandler2z/) System. out. println (/zConcreteHandler2handled) ;return; elseSystem. out println (/zConcreteHandler2passed") ; getSuccessor () handlerRequest (co ndition);packagechainOfResp ;/*描述:具體處理角色 VpublicclassConcreteHandlerNextendsHandler /*這里假設(shè) n 是鏈的最
9、后一個(gè)節(jié)點(diǎn)必須處理掉*在實(shí)際情況下,可能出現(xiàn)環(huán),或者 是樹形,*這里并不一定是最后一個(gè)節(jié)點(diǎn)。*/0verridepublicvoidhandlerRequest(Stringcondition)Syste m.out. println("ConcreteHandlerNhandled") ;packagechainOfResp ;/*描述:測(cè)試類*/publicclassClient /*描述:*/publicstaticvoidmain(StringJargs)Handlerhandlerl=newCon creteHandlerl();Handlerhandler2=n
10、ewConcreteHandler2();Handl erhandlernnewConcreteHandlerX() ;/鏈起來(lái)handler1. setSuccessor(handler2);handler2 setSuccessor(handl ern) ;/假設(shè)這個(gè)請(qǐng)求是ConcreteHandler2的責(zé)任 handlerl. handlerRequest (''ConcreteHandler2z,) ;舉這樣一個(gè)例子,在玩具工廠的生產(chǎn)車間,流水線就是一條責(zé)任 鏈,假如一個(gè)玩具飛機(jī)有外殼裝配員,引擎裝配員,螺旋槳裝配員, 模型包裝員組成。當(dāng)這個(gè)物件飛機(jī)流到誰(shuí)那里,誰(shuí)就負(fù)
11、責(zé)安裝他負(fù) 責(zé)的這一部分,這部分安裝完成后流到下一個(gè)環(huán)節(jié),知道所有環(huán)境 完成。這個(gè)是一生成的責(zé)任鏈。還有一個(gè)質(zhì)量檢測(cè)鏈,質(zhì)量檢測(cè)也 分多部,外殼檢測(cè),引擎檢測(cè),螺旋槳檢測(cè),包裝檢測(cè)。當(dāng)產(chǎn)品留 到檢測(cè)員那里檢測(cè)自己負(fù)責(zé)的那一塊,如果有問(wèn)題直接拎出來(lái),如 果沒(méi)問(wèn)題則傳給下一個(gè)檢測(cè)員,直到所有檢測(cè)完成。這兩個(gè)都是責(zé) 任鏈,但是區(qū)別是,生成責(zé)任鏈每個(gè)人都會(huì)處理,并處理一部分; 而質(zhì)量檢測(cè)責(zé)任鏈經(jīng)過(guò)判斷,要么處理掉,要么不處理流下去。這 就是責(zé)任鏈的兩種分類,后一種叫做純的責(zé)任鏈,前一種叫做不純 的責(zé)任鏈,純的責(zé)任鏈在實(shí)際應(yīng)用中很少存在,常見(jiàn)的為不純的責(zé) 任鏈,上而的模型是模擬純的責(zé)任鏈來(lái)處理的。責(zé)任鏈模式的優(yōu)缺點(diǎn)責(zé)任鏈模式與辻else相比,他的耦合性要低一些,因?yàn)樗?把條件判定都分散到了各個(gè)處理類中,并且這些處理類的優(yōu)先處理 順序可以隨意設(shè)定。責(zé)任鏈模式也有缺點(diǎn),這與辻else語(yǔ)句的 缺點(diǎn)是一樣的,那就是在找到正確的處理類之前,所有的判定條件 都要被執(zhí)行一遍,當(dāng)責(zé)任鏈比較長(zhǎng)時(shí),性能問(wèn)題比較嚴(yán)重。責(zé)任鏈模式的適用場(chǎng)景就像開(kāi)始的例子那樣,假如使用辻
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年設(shè)備監(jiān)理師考試題庫(kù)及答案(歷年真題)
- 別墅澆筑工程施工合同(2篇)
- Unit1Science and Scientists(詞匯短語(yǔ)句式)-2025屆高三人教版英語(yǔ)一輪復(fù)習(xí)闖關(guān)攻略(解析版)
- 2025屆江蘇省淮安市涇口鎮(zhèn)初級(jí)中學(xué)中考生物最后沖刺模擬試卷含解析
- 2024年度天津市公共營(yíng)養(yǎng)師之三級(jí)營(yíng)養(yǎng)師通關(guān)題庫(kù)(附帶答案)
- 2024年度天津市公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師每日一練試卷A卷含答案
- 2024年度四川省公共營(yíng)養(yǎng)師之四級(jí)營(yíng)養(yǎng)師綜合檢測(cè)試卷B卷含答案
- 2024年度四川省公共營(yíng)養(yǎng)師之三級(jí)營(yíng)養(yǎng)師能力檢測(cè)試卷A卷附答案
- 2025關(guān)于貨車掛靠合同范本
- 2024鐵路旅客運(yùn)輸市場(chǎng)前景及投資研究報(bào)告
- 施工現(xiàn)場(chǎng)預(yù)防坍塌、高處墜落事故專項(xiàng)整治工作總結(jié)
- 醫(yī)院感染暴發(fā)及處理課件
- 小學(xué)五年級(jí)體育教案全冊(cè)(人教版)
- 教科版(2024秋)六年級(jí)上冊(cè)1.各種形式的能量 教案
- 二年級(jí)數(shù)學(xué)看錯(cuò)數(shù)字問(wèn)題專項(xiàng)練習(xí)
- 北京市通州區(qū)2023-2024學(xué)年高三上學(xué)期期末考試政治試題 含解析
- 2024年1月國(guó)家開(kāi)放大學(xué)??啤斗ɡ韺W(xué)》期末紙質(zhì)考試試題及答案
- 手機(jī)短視頻拍攝與剪輯(微課版) 課件 第7章 視頻攝像
- 反訴狀(業(yè)主反訴物業(yè))(供參考)
- GH/T 1451-2024調(diào)配蜂蜜水
- 送溫暖活動(dòng)困難職工幫扶申請(qǐng)表
評(píng)論
0/150
提交評(píng)論