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