第15章责任链模式(ChainofResponsibilityPattern)课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第15章责任链模式(ChainofResponsibilityPattern)课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 15 责任 模式 ChainofResponsibilityPattern 课件
- 资源描述:
-
1、第15章 责任链模式(Chain of Responsibility Pattern)行为型模式行为型模式行为型模式概述行为型模式概述 行为型模式行为型模式(Behavioral Pattern)是对是对在不同的对在不同的对象之间划分责任和算法的抽象化象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构,而且行为型模式不仅仅关注类和对象的结构,而且重重点关注它们之间的相互作用点关注它们之间的相互作用。通过行为型模式,可以更加清晰地通过行为型模式,可以更加清晰地划分类与对象划分类与对象的职责的职责,并,并研究系统在运行时实例对象之间的交研究系统在运行时实例对象之间的交互互。在系统运行
2、时,对象并不是孤立的,它们可。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。对象在运行时也将影响到其他对象的运行。行为型模式分为行为型模式分为类行为型模式类行为型模式和和对象行为型模式对象行为型模式两两种:种:类行为型模式类行为型模式:类的行为型模式:类的行为型模式使用继承关系在使用继承关系在几个类之间分配行为几个类之间分配行为,类行为型模式主要通过多,类行为型模式主要通过多态等方式来分配父类与子类的职责。态等方式来分配父类与子类的职责。对象行为型模式对象行为型模式:对象的行为型模
3、式则:对象的行为型模式则使用对象使用对象的聚合关联关系来分配行为的聚合关联关系来分配行为,对象行为型模式主,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的要是通过对象关联等方式来分配两个或多个类的职责。根据职责。根据“合成复用原则合成复用原则”,系统中要尽量使,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。设计模式都属于对象行为型设计模式。行为型模式行为型模式行为型模式行为型模式 行为型模式简介行为型模式简介 职责链模式职责链模式(Chain of Responsibility)命令模式命令模式(
4、Command)解释器模式解释器模式(Interpreter)迭代器模式迭代器模式(Iterator)中介者模式中介者模式(Mediator)备忘录模式备忘录模式(Memento)观察者模式观察者模式(Observer)状态模式状态模式(State)策略模式策略模式(Strategy)模板方法模式模板方法模式(Template Method)访问者模式访问者模式(Visitor)职责链模式职责链模式职责链模式职责链模式模式动机模式动机 职责链可以是职责链可以是一条直线、一个环或者一个树一条直线、一个环或者一个树形结构形结构,最常见的职责链是,最常见的职责链是直线型直线型,即沿着,即沿着一条单向
5、的链一条单向的链来传递请求。来传递请求。链上的每一个对象都是请求处理者,职责链链上的每一个对象都是请求处理者,职责链模式可以模式可以将请求的处理者组织成一条链将请求的处理者组织成一条链,并,并使请求沿着链传递,由链上的处理者对请求使请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到理细节以及请求的传递,只需将请求发送到链上即可,链上即可,将请求的发送者和请求的处理者将请求的发送者和请求的处理者解耦解耦。这就是职责链模式的模式动机。这就是职责链模式的模式动机。模式定义模式定义 避免请求发送者与接收
6、者耦合在一起,避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求让多个对象都有可能接收请求,将这些将这些对象连接成一条链对象连接成一条链,并且,并且沿着这条链传沿着这条链传递请求递请求,直到有对象处理它为止。由于,直到有对象处理它为止。由于英文翻译的不同,职责链模式又称为责英文翻译的不同,职责链模式又称为责任链模式,它是一种任链模式,它是一种对象行为型模式对象行为型模式。职责链模式职责链模式责任链模式的责任链模式的UML类结构类结构 抽象处理者(抽象处理者(Handler)角色角色 定义出一个处理请求的接口;如果需要,接定义出一个处理请求的接口;如果需要,接口可以定义出一个方法,以口
7、可以定义出一个方法,以设定和返回对下设定和返回对下家的引用。这个角色通常由一个抽象类或接家的引用。这个角色通常由一个抽象类或接口实现。口实现。具体处理者(具体处理者(ConcreteHandler)角色角色 具体处理者接到请求后,可以选择将请求处具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。体处理者可以访问下家。职责链模式职责链模式模式分析模式分析在职责链模式里,很多对象在职责链模式里,很多对象由每一个对象由每一个对象对其下家的引
8、用而连接起来形成一条链对其下家的引用而连接起来形成一条链。请求在这条链上传递请求在这条链上传递,直到链上的某一个,直到链上的某一个对象处理此请求为止。对象处理此请求为止。发出这个请求的客户端并不知道链上的哪发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得一个对象最终处理这个请求,这使得系统系统可以在不影响客户端的情况下动态地重新可以在不影响客户端的情况下动态地重新组织链和分配责任组织链和分配责任。public abstract class Handler protected Handler successor;public void SetSuccessor(Handler
9、 successor)this.successor=successor;abstract public void HandleRequest(int request);public class ConcreteHandler1 extends Handler public void HandleRequest(int request)if(request=0&request=10&request=20&request 30)System.out.println(handled request:“+request.toString();else if(successor!=null)succes
10、sor.HandleRequest(request);public class Client public static void main(String args)/Setup Chain of Responsibility Handler h1=new ConcreteHandler1();Handler h2=new ConcreteHandler2();Handler h3=new ConcreteHandler3();h1.SetSuccessor(h2);h2.SetSuccessor(h3);/Generate and process request int requests=2
11、,5,14,22,18,3,27,20;foreach(int request in requests)h1.HandleRequest(request);击鼓传花击鼓传花击鼓者将花传给贾母,开始传花游戏。花由贾母传击鼓者将花传给贾母,开始传花游戏。花由贾母传给贾赦,由贾赦传给贾政,由贾政传给贾宝玉,又给贾赦,由贾赦传给贾政,由贾政传给贾宝玉,又由贾宝玉传给贾环,由贾环传回给贾母,如此往复。由贾宝玉传给贾环,由贾环传回给贾母,如此往复。当鼓声停止时,手中有花的人就得执行酒令当鼓声停止时,手中有花的人就得执行酒令.击鼓传花系统的击鼓传花系统的UML类图类图抽象处理者抽象处理者 abstract
12、class Player abstract public void handle(int i);/处理方法 private Player successor;public Player()successor=null;protected void setSuccessor(Player aSuccessor)successor=aSuccessor;public void next(int index)/传递方法 if(successor!=null)successor.handle(index);else System.out.println(Program terminated.);具体处
13、理者具体处理者class JiaMu extends Player public JiaMu(Player aSuccessor)this.setSuccessor(aSuccessor);public void handle(int i)if(i=1)System.out.println(Jia Mu gotta drink!);else System.out.println(Jia Mu passed!);next(i);客户端客户端public class DrumBeater private static Player player;static public void main(St
14、ring args)player=new JiaMu(new JiaShe(new JiaZheng(new JiaBaoYu(new JiaHuan(null);player.handle(4);AWT事件浮升机制事件浮升机制1.1.事件首先传播到它所发生的部件上,然后向事件首先传播到它所发生的部件上,然后向其父类处理器传播。其父类处理器传播。2.2.容器可以选择处理这个事件,或者再将此事容器可以选择处理这个事件,或者再将此事件向更高一级的父类处理器传播。件向更高一级的父类处理器传播。3.3.事件如此一级级地向上传播,就像水底的气事件如此一级级地向上传播,就像水底的气泡一点一点地冒到水面上一
15、样,因此又叫做泡一点一点地冒到水面上一样,因此又叫做事件浮升机制事件浮升机制。AWT库里处理事件的代码库里处理事件的代码 public boolean action(Event event,Object obj)if(event.target=btnOK)doOKBtnAction();else if(event.target=btnExit)doExitBtnAction();else return super.action(event,obj);return true;AWT1.1的事件处理模型于的事件处理模型于1.0相比有了很大的变化。相比有了很大的变化。新的事件处理模型是建立在新的事件
16、处理模型是建立在观察者模式观察者模式的基础之上的,的基础之上的,而不再是而不再是责任链模式责任链模式的基础之上的的基础之上的。AWT库里处理事件的缺点库里处理事件的缺点 AWT1.0AWT1.0的事件处理的模型是基于继承的,会导的事件处理的模型是基于继承的,会导致很多的子类,在一个面向对象的系统里,经致很多的子类,在一个面向对象的系统里,经常使用的应当是委派。常使用的应当是委派。由于每一个事件都会沿着部件树结构向上传播,由于每一个事件都会沿着部件树结构向上传播,因此事件浮升机制会使得事件的处理变得较慢因此事件浮升机制会使得事件的处理变得较慢。举例举例把一个对象在一个链接传递直到被处理。在这个链
17、把一个对象在一个链接传递直到被处理。在这个链上的所有的对象有相同的接口(抽象类)但却有不上的所有的对象有相同的接口(抽象类)但却有不同的实现。同的实现。1.java.util.logging.Logger 方法方法 log()2.Apache Tomcat 的对的对Encoding的处理的处理3.Struts2 的拦截器的拦截器4.jsp servlet 的的Filter5.JavaScript事件浮升机制事件浮升机制Example All small children cause damage,but how should they be punished?Based upon the do
展开阅读全文