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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

6精選pptaClientaHandleraConcreteHandlersuccessoraConcreteHandlersuccessor7精選ppt模式的結(jié)構(gòu)的描述與使用用戶提交一個(gè)人的身份證號(hào)碼,想知道該人是否在北京、上海或天津居住。8精選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)點(diǎn)14責(zé)任鏈中的對(duì)象只和自己的后繼是低耦合關(guān)系,和其他對(duì)象毫無關(guān)聯(lián),這使得編寫處理者對(duì)象以及創(chuàng)立責(zé)任鏈變得非常容易。當(dāng)在處理者中分配職責(zé)時(shí),責(zé)任鏈給應(yīng)用程序更多的靈活性。應(yīng)用程序可以動(dòng)態(tài)地增加、刪除處理者或重新指派處理者的職責(zé)。應(yīng)用程序可以動(dòng)態(tài)地改變處理者之間的先后順序。使用責(zé)任鏈的用戶不必知道處理者的信息,用戶不會(huì)知道到底是哪個(gè)對(duì)象處理了它的請(qǐng)求。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(“超出我的能力范圍,我計(jì)算不了");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(“超出我的能力范圍,我計(jì)算不了");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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論