軟件體系結構與設計模式第9章責任鏈模式ppt課件
《軟件體系結構與設計模式第9章責任鏈模式ppt課件》由會員分享,可在線閱讀,更多相關《軟件體系結構與設計模式第9章責任鏈模式ppt課件(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第九章 責任鏈模式,,1,責任鏈模式 使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。 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模式在軍隊中也有應用的例子。某個下級軍官要求得到上級軍官的許可,這個請求將由其直接上級軍官再報給上級軍官的上級軍官,直到某個上級軍官有權利做決定為止。如果一名水兵請求進入某個海軍基地,他說執(zhí)行的請求過程就是Chain of Responsibility的實例。,3,一 、 概述,,4,責任鏈模式是使用多個對象處理用戶請求的成熟模式,責任鏈模式的關鍵是將用戶的請求分派給許多對象,這些對象被組織成一個責任鏈,即每個對象含有后繼對象的引用,并要求責任鏈上的每個對象,如果能處理用戶的請求,就做出處理,不再將用戶的請求傳遞給責任鏈上的下一個對象;如果不能處理用戶的請求,就必須將用戶的請求傳遞給責任鏈上的下一個對象。,4,二、責任鏈模式的結構與使用,,5,模式的結構中包括兩種角色: 處理者(Handler) 具體處理者(ConcreteHandler),5,,6,模式的UML類圖,6,aClient aHandler,aConcreteHandler successor,aConcreteHandler successor,,,,,,,,7,模式的結構的描述與使用,用戶提交一個人的身份證號碼,想知道該人是否在北京、上海或天津居住。,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.應用 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,三、責任鏈模式的優(yōu)點,,14,責任鏈中的對象只和自己的后繼是低耦合關系,和其他對象毫無關聯(lián),這使得編寫處理者對象以及創(chuàng)建責任鏈變得非常容易。 當在處理者中分配職責時,責任鏈給應用程序更多的靈活性。 應用程序可以動態(tài)地增加、刪除處理者或重新指派處理者的職責。 應用程序可以動態(tài)地改變處理者之間的先后順序。 使用責任鏈的用戶不必知道處理者的信息,用戶不會知道到底是哪個對象處理了它的請求。,14,四、應用舉例,// 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,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 軟件 體系結構 設計 模式 責任 ppt 課件
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://weibangfood.com.cn/p-1925303.html