第十章 责任链模式_第1页
第十章 责任链模式_第2页
第十章 责任链模式_第3页
第十章 责任链模式_第4页
第十章 责任链模式_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第九章第九章 责任链模式责任链模式 2022-4-261责任链模式责任链模式使多个对象都有机会处理请求,从而避免请求的发送者使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。沿着这条链传递该请求,直到有一个对象处理它为止。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模式在军队中也有应用的例子。某个下级军官要求得到上级军官的许可,这个请求将由其直接上级军官再报给上级军官的上级军官,直到某个上级军官有权利做决定为止。如果一名水兵请求进入某个海军基地,他说执行的请求过程就是Chain of Responsibility的实例。一一 、 概述概述 2022-4-264 责任

3、链模式是使用多个对象处理用户请求责任链模式是使用多个对象处理用户请求的成熟模式,责任链模式的关键是将用户的请的成熟模式,责任链模式的关键是将用户的请求分派给许多对象,这些对象被组织成一个责求分派给许多对象,这些对象被组织成一个责任链,即每个对象含有后继对象的引用,并要任链,即每个对象含有后继对象的引用,并要求责任链上的每个对象,如果能处理用户的请求责任链上的每个对象,如果能处理用户的请求,就做出处理,不再将用户的请求传递给责求,就做出处理,不再将用户的请求传递给责任链上的下一个对象;如果不能处理用户的请任链上的下一个对象;如果不能处理用户的请求,就必须将用户的请求传递给责任链上的下求,就必须将

4、用户的请求传递给责任链上的下一个对象。一个对象。 二、二、责任链模式的结构与使用责任链模式的结构与使用 2022-4-265模式的结构中包括两种角色:模式的结构中包括两种角色: 处理者(处理者(HandlerHandler) 具体处理者(具体处理者(ConcreteHandlerConcreteHandler) 2022-4-266模式的模式的UMLUML类图类图 aClientaHandleraConcreteHandlersuccessoraConcreteHandlersuccessor模式的结构的描述与使用模式的结构的描述与使用 用户提交一个人的身份证号码,想知道该人是否在北京、上海或

5、天津居住。2022-4-2691 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-4-26102 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-4-26112 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-4-26122 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-4-26133 3应用应用 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); 三、三、责任链模式的优点责任链模式的优点 2022-4-2614责任链中的对象只和自己的后继是低耦合关系,和其他对象毫无关联,这使得编写处理者对象以及创建责任链变得非常容易。

21、当在处理者中分配职责时,责任链给应用程序更多的灵活性。应用程序可以动态地增加、删除处理者或重新指派处理者的职责。应用程序可以动态地改变处理者之间的先后顺序。使用责任链的用户不必知道处理者的信息,用户不会知道到底是哪个对象处理了它的请求。四、应用举例/ 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论