软件体系结构与设计模式第9章责任链模式ppt课件
《软件体系结构与设计模式第9章责任链模式ppt课件》由会员分享,可在线阅读,更多相关《软件体系结构与设计模式第9章责任链模式ppt课件(19页珍藏版)》请在装配图网上搜索。
第九章 责任链模式,,1,责任链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 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模式在军队中也有应用的例子。某个下级军官要求得到上级军官的许可,这个请求将由其直接上级军官再报给上级军官的上级军官,直到某个上级军官有权利做决定为止。如果一名水兵请求进入某个海军基地,他说执行的请求过程就是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,三、责任链模式的优点,,14,责任链中的对象只和自己的后继是低耦合关系,和其他对象毫无关联,这使得编写处理者对象以及创建责任链变得非常容易。 当在处理者中分配职责时,责任链给应用程序更多的灵活性。 应用程序可以动态地增加、删除处理者或重新指派处理者的职责。 应用程序可以动态地改变处理者之间的先后顺序。 使用责任链的用户不必知道处理者的信息,用户不会知道到底是哪个对象处理了它的请求。,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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 体系结构 设计 模式 责任 ppt 课件
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
链接地址:https://www.zhuangpeitu.com/p-1925303.html