快速业务通道

Java模式开发之责任链模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
其它部分完成。

责任链模式减低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。一个链可以是一条线,一个树,也可以是一个环。链的拓扑结构可以是单连通的或多连通的,责任链模式并不指定责任链的拓扑结构。但是责任链模式要求在同一个时间里,命令只可以被传给一个下家(或被处理掉);而不可以传给多于一个下家。在下面的图中,责任链是一个树结构的一部分。

Java模式开发之责任链模式 - 编程入门网

图9、责任链是系统已有的树结构的一部分。图中有阴影的对象给出了一个可能的命令传播路径。

Java模式开发之责任链模式(7)

时间:2009-12-15

责任链的成员往往是一个更大的结构的一部分。比如在前面所讨论的《红楼梦》中击鼓传花的游戏中,所有的成员都是贾府的成员。如果责任链的成员不存在,那么为了使用责任链模式,就必须创建它们;责任链的具体处理者对象可以是同一个具体处理者类的实例。

在Java的1.0版的AWT事件处理模型里,责任链便是视窗上的部件的容器等级结构。

在下面会谈到的Internet Explorer的DHTML的DOM事件处理模型里,责任链则是DOM等级结构本身。

命令的传递

在一个责任链上传递的可能不只有一个命令,而是数个命令。这些命令可以采取抽象化层、具体化层的多态性实现方式,见下图,从而可以将命令对象与责任链上的对象之间的责任分隔开,并将命令对象与传播命令的对象分隔开。

Java模式开发之责任链模式 - 编程入门网

图10、多个命令在责任链上的传播。

当然如果责任链上的传播的命令只有一个、且是固定的命令,那么这个命令不一定要对象化。这就是本节处理击鼓传花游戏里面传来传去的花束的办法。花束代表酒令,可以由一个对象代表;但是本章的处理是过程式的,用对下家对象的next()方法的调用达成。

对象的树结构

在面向对象的技术里,对象的树结构是一个强有力的工具,更是模式理论的一个重要的组成部分,需要应用到符合模式、装饰模式和迭代子模式。

《墨子.天志》说:“庶人竭力从事,未得次己而为政,有士政之,士竭力从事,未得次己而为政,有将军、大夫政之;将军、大夫竭力从事,未得次己而为政,有三公、诸侯政之;三公、诸侯竭力听治,未得次己而为政,有天子政之;天子未得次己而为政,有天政之。”

“次”意为恣意。上面的话就是说,百姓有官吏管治,官吏由将军和士大夫管治,将军和士大夫由三公和诸侯管治,三公和诸侯由天子管治,天子由天管治。

Java模式开发之责任链模式 - 编程入门网

图11、墨子论责任和责任链的传播。图中有阴影的对象给出了一个可能的责任链选择。

当一个百姓提出要求时,此要求会传达到“士”一级,再到“大夫”一级,进而传到“诸侯”一级,“天子”一级,最后到“天”一级。

DHTML中的事件处理

浏览器的DOM(Document Object Model)模型中的事件处理均采用责任链模式。本节首先考察Netscape浏览器的DHTML的事件处理,然后再研究Internet Explorer的事件模型。

Netscape的事件模型

Netscape的事件处理机制叫做“事件捕捉”(Event Capturing)。在事件捕捉机制里面,一个事件是从DOM的最高一层向下传播,也就是说,window对象是第一个接到事件的,然后是document对象,如此往下---事件的产生对象反而是最后一个接到事件的。

如果要是一个对象捕获某一个事件,只需要调用captureEvent()方法;如果要使一个对象把某一个事件向下传而不处理此事件,只需要对此对象使用releaseEvents方法即可。下面考察一个简单的事件捕获和传递的例子。

Java模式开发之责任链模式 - 编程入门网

图12、一个Netscape的例子。

Java模式开发之责任链模式(8)

时间:2009-12-15

在这个例子里,有一个textbox和两个button,一个叫做“Capture Event”,单击后会使网页的click事件被捕捉,文字框中的计数

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号