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

下載本文檔

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

文檔簡介

1、第九章第九章 責任鏈模式責任鏈模式 2022-2-221責任鏈模式責任鏈模式使多個對象都有機會處理請求,從而避免請求的發(fā)送者使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。沿著這條鏈傳遞該請求,直到有一個對象處理它為止。Chain of Responsibility Pattern Avoid coupling the sender of a request to its receiver by giving more than one object

2、a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.Chain of Responsibility模式在軍隊中也有應(yīng)用的例子。某個下級軍官要求得到上級軍官的許可,這個請求將由其直接上級軍官再報給上級軍官的上級軍官,直到某個上級軍官有權(quán)利做決定為止。如果一名水兵請求進入某個海軍基地,他說執(zhí)行的請求過程就是Chain of Responsibility的實例。一一 、 概述概述 2022-2-224 責任

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

4、用戶的請求傳遞給責任鏈上的下一個對象。一個對象。 二、二、責任鏈模式的結(jié)構(gòu)與使用責任鏈模式的結(jié)構(gòu)與使用 2022-2-225模式的結(jié)構(gòu)中包括兩種角色:模式的結(jié)構(gòu)中包括兩種角色: 處理者(處理者(HandlerHandler) 具體處理者(具體處理者(ConcreteHandlerConcreteHandler) 2022-2-226模式的模式的UMLUML類圖類圖 aClientaHandleraConcreteHandlersuccessoraConcreteHandlersuccessor模式的結(jié)構(gòu)的描述與使用模式的結(jié)構(gòu)的描述與使用 用戶提交一個人的身份證號碼,想知道該人是否在北京、上?;?/p>

5、天津居住。2022-2-2291 1處理者(處理者(HandlerHandler): : Handler.java Handler.java public interface Handlerpublic interface Handler public abstract void handleRequest(String public abstract void handleRequest(String number); number); public abstract void setNextHandler(Handler public abstract void setNextHandle

6、r(Handler handler); handler); 2022-2-22102 2具體處理者(具體處理者(ConcreteHandlerConcreteHandler)_1: _1: Beijing.java Beijing.java public class Beijing implements Handlerpublic class Beijing implements Handler private Handler handler; private Handler handler; private ArrayList numberList private ArrayList num

7、berList; ; Beijing() Beijing() numberList=new ArrayList numberList=new ArrayList();(); numberList.add(11129812340930034); numberList.add(11129812340930034); numberList.add(10120810340930632); numberList.add(10120810340930632); numberList.add(22029812340930034); numberList.add(22029812340930034); num

8、berList.add(32620810340930632); numberList.add(32620810340930632); public void handleRequest(String public void handleRequest(String number) number) if(numberList.contains(number if(numberList.contains(number) System.out.println System.out.println(該人在北京居住該人在北京居住);); else else System.out.println Syst

9、em.out.println(該人不在北京居住該人不在北京居住);); if(handler!=null) if(handler!=null) handler.handleRequest(number handler.handleRequest(number); ); public void setNextHandler(Handler public void setNextHandler(Handler handler) handler) this.handler=handler; this.handler=handler; 2022-2-22112 2具體處理者(具體處理者(Concret

10、eHandlerConcreteHandler)_2: _2: Shanghai.java Shanghai.java public class Shanghai implements Handlerpublic class Shanghai implements Handler private Handler handler; private Handler handler; private ArrayList numberList private ArrayList numberList; ; Shanghai() Shanghai() numberList=new ArrayList n

11、umberList=new ArrayList();(); numberList.add(34529812340930034); numberList.add(34529812340930034); numberList.add(98720810340430632); numberList.add(98720810340430632); numberList.add(36529812340930034); numberList.add(36529812340930034); numberList.add(77720810340930632); numberList.add(7772081034

12、0930632); public void handleRequest(String public void handleRequest(String number) number) if(numberList.contains(number if(numberList.contains(number) System.out.println System.out.println(該人在上海居住該人在上海居住);); else else System.out.println System.out.println(該人不在上海居住該人不在上海居住);); if(handler!=null) if(

13、handler!=null) handler.handleRequest(number handler.handleRequest(number); ); public void setNextHandler(Handler public void setNextHandler(Handler handler) handler) this.handler=handler; this.handler=handler; 2022-2-22122 2具體處理者(具體處理者(ConcreteHandlerConcreteHandler)_3: _3: Tianjin.javaTianjin.java

14、public class Tianjin implements Handlerpublic class Tianjin implements Handler private Handler handler; private Handler handler; private ArrayList numberList private ArrayList numberList; ; Tianjin() Tianjin() numberList=new ArrayList numberList=new ArrayList();(); numberList.add(10029812340930034);

15、 numberList.add(10029812340930034); numberList.add(20020810340430632); numberList.add(20020810340430632); numberList.add(30029812340930034); numberList.add(30029812340930034); numberList.add(50020810340930632); numberList.add(50020810340930632); public void handleRequest(String public void handleReq

16、uest(String number) number) if(numberList.contains(number if(numberList.contains(number) System.out.println System.out.println(該人在天津居住該人在天津居住);); else else System.out.println System.out.println(該人不在天津居住該人不在天津居住);); if(handler!=null) if(handler!=null) handler.handleRequest(number handler.handleReques

17、t(number); ); public void setNextHandler(Handler public void setNextHandler(Handler handler) handler) this.handler=handler; this.handler=handler; 2022-2-22133 3應(yīng)用應(yīng)用 Application.javaApplication.java public class Application public class Application private Handler beijing,shanghai,tianjin private Han

18、dler beijing,shanghai,tianjin; ; public void createChain public void createChain() () beijing beijing=new Beijing();=new Beijing(); shanghai=new Shanghai(); shanghai=new Shanghai(); tianjin tianjin=new Tianjin();=new Tianjin(); beijing.setNextHandler(shanghai beijing.setNextHandler(shanghai);); shan

19、ghai.setNextHandler(tianjin shanghai.setNextHandler(tianjin);); public void reponseClient(String public void reponseClient(String number) number) beijing.handleRequest(number beijing.handleRequest(number);); public static void main(String args public static void main(String args) Application applica

20、tion=new Application(); Application application=new Application(); application.createChain application.createChain();(); application.reponseClient(77720810340930632); application.reponseClient(77720810340930632); 三、三、責任鏈模式的優(yōu)點責任鏈模式的優(yōu)點 2022-2-2214責任鏈中的對象只和自己的后繼是低耦合關(guān)系,和其他對象毫無關(guān)聯(lián),這使得編寫處理者對象以及創(chuàng)建責任鏈變得非常容易。

21、當在處理者中分配職責時,責任鏈給應(yīng)用程序更多的靈活性。應(yīng)用程序可以動態(tài)地增加、刪除處理者或重新指派處理者的職責。應(yīng)用程序可以動態(tài)地改變處理者之間的先后順序。使用責任鏈的用戶不必知道處理者的信息,用戶不會知道到底是哪個對象處理了它的請求。四、應(yīng)用舉例/ Handler.javapublic interface Handler public abstract void compuerMultiply(String number); public abstract void setNextHandler(Handler handler);public class UseInt implements

22、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); cat

23、ch(NumberFormatException exp) System.out.println(exp.toString(); public void setNextHandler(Handler handler) this.handler=handler; public class UseLong implements Handler private Handler handler; private long result=1 ; public void compuerMultiply(String number) try long n=Long.parseLong(number); lo

24、ng 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; import java.math.BigInteger;public class UseBigInteger implements Handler private Handler handler; private BigInteger result=new Bi

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論