责任链设计模式的研究

责任链设计模式的研究

ID:46898293

大小:51.00 KB

页数:8页

时间:2019-11-29

责任链设计模式的研究_第1页
责任链设计模式的研究_第2页
责任链设计模式的研究_第3页
责任链设计模式的研究_第4页
责任链设计模式的研究_第5页
资源描述:

《责任链设计模式的研究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、责任链设计模式的研究摘要:传统责任链设计模式采用面向对象的程序设计标准加以实现,过多强调程序的扩展性,但没有考虑并发性、空间及时间问题,在使用过程屮造成空间及时间上的浪费,降低程序处理的并发性。针对上述问题,提出一种责任链设计模式创建过程,利用延迟初始化技术减少不必要的请求处理者数量。该方法不仅维持了责任链的核心应用思想及标准实现模式,而且能够根据实际请求码,创建具体处理实例,从而提高程序的整体性能。关健词:设计模式;责任链;延迟初始化;并发性1概述设计模式是面向对象程序设计的重要部分,文献【1】屮的典型设计模式对从分析模式转

2、换到实现模式具有重要的指导作用。其中,很多模式只是介绍了它的适用性和一些常见的实现方法,没有进一步分析每个模式在使用中的注意事项及其性能的描述。文献【1-2】中的责任链(ChainofResponsib订ity,COR)设计模式介绍了它实现时要考虑的关键问题,但没有对C0R模式在并发的场景下提出实现的注意事项。在并发性较强的情况下,如webservice、服务器端程序等,COR的实例化性能和处理效率问题很关键。2COR的问题描述COR是指试图用一系列类来处理一个请求(Request),这些类之间是松散耦合的,唯一共同点是在它们

3、之间传递Request,即提出一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,像一个链条(Chain)一样传递下去。这个模式应用很广,它主要解决了在客户代码中,用户请求的分支处理问题,大大减少了客户代码的条件分支处理问题代码,采用面向对象的设计,使各个处理代码分离,耦合性降低,在不修改客户代码的情况下,可以容易地动态增加处理者,提高系统扩展性。2.1COR特点COR特点有:(1)因为无法预知来口外界的请求是属于哪种类型,所以每个类如果碰到不能处理的请求只要放弃即可。这降低了类之间的耦合性。

4、(2)效率低:一个请求的完成可能要遍历到最后才完成。(3)扩展性:在COR屮,一定要有一个统一的接口Handlero采用面向对象的程序设计(Object-OrientedProgramming,OOP)是设计模式的实现耍求,可是这种方式构造COR的时候,创建了过多的无用Handlero每次COR在处理请求之前,需耍创建所有的请求处理者,并将它们组织成链,即使它们在真正请求到來吋并不是真正的处理者。这就造成了很多的构造时间和空间的浪费,尤其是Handler在实例化时,若进行过多复朵的、耗时的操作,缺点更明显,并发问题凸显。2.1

5、COR设计模式如图1所示,每一个Hand1er都保存一个指向下一个Hand1er的引用。1责任链UML图以上COR的标准形式,具有很好的扩展性,进行简单修改即可使Client和COR的构造过程有效分离,可以使程序具有动态增加请求处理者的能力,达到好的扩展性。可是,从以上的UML中可以看出,责任链的构造和使用方法,每次请求最多只有一个Handler接受处理,其他的Hand1er都是无用实例,Handler越多,问题越明显。对于COR模式,相关文献也提到:在构造的时候尽量使用已存在的Handler引用,或者根据情况创建具体Hand

6、lej,但是没有给出较好的而向对象实现。3责任链模式的改进设计3.1解决问题的关解决问题的关键为:(1)使用单态模式构造一个全局唯一的责任链;这就可以避免每次处理时,多次创建责任链的缺点,减少了时间、空间的消耗。但是,单态责任链不能够很好地处理大景并发请求问题,对于资源的争夺、共享都会出现问题。如果使用同步技术,又会造成处理期间大量请求处于等待的问题,大大降低了程序性能和客户体验,尤其是在并发性很强的Web应用。(2)在每次处理请求时都创建一个责任链,这样很好地解决了程序并发性问题;为了减少每次倒建责任链时创建不札I关的Han

7、dler实例问题,采用根据请求码(RequestCode),动态创建Handlero(3)改进设计应该遵循单一职责(SRP)131和开放封闭原则(ocP)HJ,保证设计的扩展性需要。3.2COR的程序改进设计请求处理映射表(RHT)的说明如下:将所有的处理请求处理(Handler)存放在一个表(Hashtablc)中,在每次请求到来的时候,在请求表中查找请求处理者是否存在,如果存在,创建相应的Handler,进行请求的处理,这样就可以避免每次在创建C0R的吋候,创建多余的Handler,但是这样的代码有悖于COR设计模式的代码

8、规范,甚至可能退化到没有采用C0R设计模式的程度。构造链(Chain)没有直接创建Handler的实例,从结构上保持了与COR标准格式一致,同时又解决了COR的缺点。苴中,在ChainDirector屮保存了HandlerMap的映射关系,以便于在请求发起的时候,能够根据类型

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。