軟件體系結(jié)構(gòu)與設(shè)計模式第9章責(zé)任鏈模式ppt課件
《軟件體系結(jié)構(gòu)與設(shè)計模式第9章責(zé)任鏈模式ppt課件》由會員分享,可在線閱讀,更多相關(guān)《軟件體系結(jié)構(gòu)與設(shè)計模式第9章責(zé)任鏈模式ppt課件(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第九章 責(zé)任鏈模式,,1,責(zé)任鏈模式 使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。 Chain of Responsibility Pattern Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.,1,2,Chain of Responsibility模式在軍隊中也有應(yīng)用的例子。某個下級軍官要求得到上級軍官的許可,這個請求將由其直接上級軍官再報給上級軍官的上級軍官,直到某個上級軍官有權(quán)利做決定為止。如果一名水兵請求進(jìn)入某個海軍基地,他說執(zhí)行的請求過程就是Chain of Responsibility的實例。,3,一 、 概述,,4,責(zé)任鏈模式是使用多個對象處理用戶請求的成熟模式,責(zé)任鏈模式的關(guān)鍵是將用戶的請求分派給許多對象,這些對象被組織成一個責(zé)任鏈,即每個對象含有后繼對象的引用,并要求責(zé)任鏈上的每個對象,如果能處理用戶的請求,就做出處理,不再將用戶的請求傳遞給責(zé)任鏈上的下一個對象;如果不能處理用戶的請求,就必須將用戶的請求傳遞給責(zé)任鏈上的下一個對象。,4,二、責(zé)任鏈模式的結(jié)構(gòu)與使用,,5,模式的結(jié)構(gòu)中包括兩種角色: 處理者(Handler) 具體處理者(ConcreteHandler),5,,6,模式的UML類圖,6,aClient aHandler,aConcreteHandler successor,aConcreteHandler successor,,,,,,,,7,模式的結(jié)構(gòu)的描述與使用,用戶提交一個人的身份證號碼,想知道該人是否在北京、上海或天津居住。,8,9,1.處理者(Handler): Handler.java public interface Handler{ public abstract void handleRequest(String number); public abstract void setNextHandler(Handler handler); },9,10,2.具體處理者(ConcreteHandler)_1: Beijing.java public class Beijing implements Handler{ private Handler handler; private ArrayList numberList; Beijing(){ numberList=new ArrayList(); numberList.add(“11129812340930034“); numberList.add(“10120810340930632“); numberList.add(“22029812340930034“); numberList.add(“32620810340930632“); } public void handleRequest(String number){ if(numberList.contains(number)) System.out.println(“該人在北京居住“); else{ System.out.println(“該人不在北京居住“); if(handler!=null) handler.handleRequest(number); } } public void setNextHandler(Handler handler){ this.handler=handler; }},10,11,2.具體處理者(ConcreteHandler)_2: Shanghai.java public class Shanghai implements Handler{ private Handler handler; private ArrayList numberList; Shanghai(){ numberList=new ArrayList(); numberList.add(“34529812340930034“); numberList.add(“98720810340430632“); numberList.add(“36529812340930034“); numberList.add(“77720810340930632“); } public void handleRequest(String number){ if(numberList.contains(number)) System.out.println(“該人在上海居住“); else{ System.out.println(“該人不在上海居住“); if(handler!=null) handler.handleRequest(number); } } public void setNextHandler(Handler handler){ this.handler=handler; } },11,12,2.具體處理者(ConcreteHandler)_3: Tianjin.java public class Tianjin implements Handler{ private Handler handler; private ArrayList numberList; Tianjin(){ numberList=new ArrayList(); numberList.add(“10029812340930034“); numberList.add(“20020810340430632“); numberList.add(“30029812340930034“); numberList.add(“50020810340930632“); } public void handleRequest(String number){ if(numberList.contains(number)) System.out.println(“該人在天津居住“); else{ System.out.println(“該人不在天津居住“); if(handler!=null) handler.handleRequest(number); } } public void setNextHandler(Handler handler){ this.handler=handler; } },12,13,3.應(yīng)用 Application.java public class Application{ private Handler beijing,shanghai,tianjin; public void createChain(){ beijing=new Beijing(); shanghai=new Shanghai(); tianjin=new Tianjin(); beijing.setNextHandler(shanghai); shanghai.setNextHandler(tianjin); } public void reponseClient(String number){ beijing.handleRequest(number); } public static void main(String args[]){ Application application=new Application(); application.createChain(); application.reponseClient(“77720810340930632“);; } },13,三、責(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,四、應(yīng)用舉例,// Handler.java public interface Handler{ public abstract void compuerMultiply(String number); public abstract void setNextHandler(Handler handler); },15,public class UseInt implements Handler{ private Handler handler; private int result=1 ; public void compuerMultiply(String number){ try{ int n=Integer.parseInt(number); int i=1; while(i=n){ result=result*i; if(result=0){ System.out.println(“超出我的能力范圍,我計算不了“); puerMultiply(number); return; } i++; } System.out.println(number+“的階乘:“+result); } catch(NumberFormatException exp){ System.out.println(exp.toString()); } } public void setNextHandler(Handler handler){ this.handler=handler; } },16,public class UseLong implements Handler{ private Handler handler; private long result=1 ; public void compuerMultiply(String number){ try{ long n=Long.parseLong(number); long i=1; while(i=n){ result=result*i; if(result=0){ System.out.println(“超出我的能力范圍,我計算不了“); puerMultiply(number); return; } i++; } System.out.println(number+“的階乘:“+result); } catch(NumberFormatException exp){ System.out.println(exp.toString()); } } public void setNextHandler(Handler handler){ this.handler=handler; } },17,import java.math.BigInteger; public class UseBigInteger implements Handler{ private Handler handler; private BigInteger result=new BigInteger(“1“) ; public void compuerMultiply(String number){ try{ BigInteger n=new BigInteger(number); BigInteger ONE=new BigInteger(“1“); BigInteger i=ONE; while(pareTo(n)=0){ result=result.multiply(i); i=i.add(ONE); } System.out.println(number+“??????:“+result); } catch(NumberFormatException exp){ System.out.println(exp.toString()); } } public void setNextHandler(Handler handler){ this.handler=handler; } },18,public class Application{ private Handler useInt,useLong,useBig; public void createChain(){ useInt=new UseInt(); useLong=new UseLong(); useBig=new UseBigInteger(); useInt.setNextHandler(useLong); useLong.setNextHandler(useBig); } public void reponseClient(String number){ useIpuerMultiply(number); } public static void main(String args[]){ Application application=new Application(); application.createChain(); application.reponseClient(“32“); } },19,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
20 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 軟件 體系結(jié)構(gòu) 設(shè)計 模式 責(zé)任 ppt 課件
鏈接地址:http://www.820124.com/p-1925303.html