軟件體系結(jié)構(gòu)與設(shè)計模式第9章責(zé)任鏈模式_第1頁
軟件體系結(jié)構(gòu)與設(shè)計模式第9章責(zé)任鏈模式_第2頁
軟件體系結(jié)構(gòu)與設(shè)計模式第9章責(zé)任鏈模式_第3頁
軟件體系結(jié)構(gòu)與設(shè)計模式第9章責(zé)任鏈模式_第4頁
軟件體系結(jié)構(gòu)與設(shè)計模式第9章責(zé)任鏈模式_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第九章責(zé)任鏈模式1責(zé)任鏈模式使多個對象都有時機(jī)處理請求,從而防止請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。ChainofResponsibilityPatternAvoidcouplingthesenderofarequesttoitsreceiverbygivingmorethanoneobjectachancetohandletherequest.Chainthereceivingobjectsandpasstherequestalongthechainuntilanobjecthandlesit.1精選ppt2精選pptChainofResponsibility模式在軍隊中也有應(yīng)用的例子。某個下級軍官要求得到上級軍官的許可,這個請求將由其直接上級軍官再報給上級軍官的上級軍官,直到某個上級軍官有權(quán)利做決定為止。如果一名水兵請求進(jìn)入某個海軍基地,他說執(zhí)行的請求過程就是ChainofResponsibility的實例。3精選ppt一、概述4

責(zé)任鏈模式是使用多個對象處理用戶請求的成熟模式,責(zé)任鏈模式的關(guān)鍵是將用戶的請求分派給許多對象,這些對象被組織成一個責(zé)任鏈,即每個對象含有后繼對象的引用,并要求責(zé)任鏈上的每個對象,如果能處理用戶的請求,就做出處理,不再將用戶的請求傳遞給責(zé)任鏈上的下一個對象;如果不能處理用戶的請求,就必須將用戶的請求傳遞給責(zé)任鏈上的下一個對象。4精選ppt二、責(zé)任鏈模式的結(jié)構(gòu)與使用

5模式的結(jié)構(gòu)中包括兩種角色:處理者〔Handler〕具體處理者〔ConcreteHandler〕5精選ppt6模式的UML類圖

6精選pptaClientaHandleraConcreteHandlersuccessoraConcreteHandlersuccessor7精選ppt模式的結(jié)構(gòu)的描述與使用用戶提交一個人的身份證號碼,想知道該人是否在北京、上?;蛱旖蚓幼 ?精選ppt91.處理者〔Handler〕:Handler.javapublicinterfaceHandler{publicabstractvoidhandleRequest(Stringnumber);publicabstractvoidsetNextHandler(Handlerhandler);}9精選ppt102.具體處理者〔ConcreteHandler〕_1:Beijing.javapublicclassBeijingimplementsHandler{privateHandlerhandler;privateArrayList<String>numberList;Beijing(){numberList=newArrayList<String>();numberList.add("11129812340930034");numberList.add("10120810340930632");numberList.add("22029812340930034");numberList.add("32620810340930632");}publicvoidhandleRequest(Stringnumber){if(numberList.contains(number))System.out.println("該人在北京居住");else{System.out.println("該人不在北京居住");if(handler!=null)handler.handleRequest(number);}}publicvoidsetNextHandler(Handlerhandler){this.handler=handler;}}10精選ppt112.具體處理者〔ConcreteHandler〕_2:Shanghai.javapublicclassShanghaiimplementsHandler{privateHandlerhandler;privateArrayList<String>numberList;Shanghai(){numberList=newArrayList<String>();numberList.add("34529812340930034");numberList.add("98720810340430632");numberList.add("36529812340930034");numberList.add("77720810340930632");}publicvoidhandleRequest(Stringnumber){if(numberList.contains(number))System.out.println("該人在上海居住");else{System.out.println("該人不在上海居住");if(handler!=null)handler.handleRequest(number);}}publicvoidsetNextHandler(Handlerhandler){this.handler=handler;}}11精選ppt122.具體處理者〔ConcreteHandler〕_3:Tianjin.javapublicclassTianjinimplementsHandler{privateHandlerhandler;privateArrayList<String>numberList;Tianjin(){numberList=newArrayList<String>();numberList.add("10029812340930034");numberList.add("20020810340430632");numberList.add("30029812340930034");numberList.add("50020810340930632");}publicvoidhandleRequest(Stringnumber){if(numberList.contains(number))System.out.println("該人在天津居住");else{System.out.println("該人不在天津居住");if(handler!=null)handler.handleRequest(number);}}publicvoidsetNextHandler(Handlerhandler){this.handler=handler;}}12精選ppt133.應(yīng)用Application.javapublicclassApplication{privateHandlerbeijing,shanghai,tianjin;publicvoidcreateChain(){beijing=newBeijing();shanghai=newShanghai();tianjin=newTianjin();beijing.setNextHandler(shanghai);shanghai.setNextHandler(tianjin);}publicvoidreponseClient(Stringnumber){beijing.handleRequest(number);}publicstaticvoidmain(Stringargs[]){Applicationapplication=newApplication();application.createChain();application.reponseClient("77720810340930632");;}}13精選ppt三、責(zé)任鏈模式的優(yōu)點14責(zé)任鏈中的對象只和自己的后繼是低耦合關(guān)系,和其他對象毫無關(guān)聯(lián),這使得編寫處理者對象以及創(chuàng)立責(zé)任鏈變得非常容易。當(dāng)在處理者中分配職責(zé)時,責(zé)任鏈給應(yīng)用程序更多的靈活性。應(yīng)用程序可以動態(tài)地增加、刪除處理者或重新指派處理者的職責(zé)。應(yīng)用程序可以動態(tài)地改變處理者之間的先后順序。使用責(zé)任鏈的用戶不必知道處理者的信息,用戶不會知道到底是哪個對象處理了它的請求。14精選ppt四、應(yīng)用舉例//Handler.javapublicinterfaceHandler{publicabstractvoidcompuerMultiply(Stringnumber);publicabstractvoidsetNextHandler(Handlerhandler);}15精選pptpublicclassUseIntimplementsHandler{privateHandlerhandler;privateintresult=1;publicvoidcompuerMultiply(Stringnumber){try{intn=Integer.parseInt(number);inti=1;while(i<=n){result=result*i;if(result<=0){System.out.println(“超出我的能力范圍,我計算不了");handlerpuerMultiply(number);return;}i++;}System.out.println(number+“的階乘:"+result);}catch(NumberFormatExceptionexp){System.out.println(exp.toString());}}publicvoidsetNextHandler(Handlerhandler){this.handler=handler;}}16精選pptpublicclassUseLongimplementsHandler{privateHandlerhandler;privatelongresult=1;publicvoidcompuerMultiply(Stringnumber){try{longn=Long.parseLong(number);longi=1;while(i<=n){result=result*i;if(result<=0){System.out.println(“超出我的能力范圍,我計算不了");handlerpuerMultiply(number);return;}i++;}System.out.println(number+“的階乘:"+result);}catch(NumberFormatExceptionexp){System.out.println(exp.toString());}}publicvoidsetNextHandler(Handlerhandler){this.handler=handler;}}17精選pptimportjava.math.BigInteger;publicclassUseBigIntegerimplementsHandler{privateHandlerhandler;privateBigIntegerresult=newBigInteger("1");publicvoidcompuerMultiply(Stringnumber){try{BigIntegern=newBigInteger(number);BigIntegerONE=newBigInteger("1");BigIntegeri=ONE;while(ipareTo(n)<=0){result=result.multiply(i);i=i.add(ONE);}System.out.println(number+"??????:"+result);}catch(NumberFormatEx

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論