责任链模式实例讲解

本文介绍了责任链模式,一种较少被广泛使用但作者偏爱的设计模式。责任链模式通过对象链的形式处理请求,使调用者无需关心具体处理者,保持了系统的灵活性。文章以Java为例,展示了如何在XML解析中应用责任链模式,简化代码,实现可扩展性。作者通过创建NodeConverter抽象基类和其实现子类,如StringConverter,展示了如何构建和使用责任链。
摘要由CSDN通过智能技术生成

 老狗可能是国内最早接触到设计模式的程序员之一,却从来没想到过要把自己的心得和理论总结一下,写成文章与众狗狗们分享。等到想起来这么做时,发现关于设计模式的书籍已经汗牛充栋了,老狗就是这样,吃屎都抢不到尖尖!如今只好捡一些比较冷僻的,别人较少提及的模式来细说一下了,庶几能为众狗狗们拾遗补阙尔。
   责任链模式大约就属于这种冷僻的模式,大家在实际运用中一般较少用到。然而这是老狗偏爱的模式之一,为何呢?请看对责任链模式的描述:
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
   ---以上描述摘自阎宏博士的《JAVA与模式》一书,按宇宙惯例在此向阎博士致谢。
   拿我大天朝神秘的有关部门来比方,责任链上的每个对象就像我天朝的某个有关部门,每个部门都只管自己职责内的事。比我天朝有关部门好的一点是,超出职责的事情,责任链上的对象不会把案子踢回给调用者,让调用者自己去想办法,而是依次传递下去,直到某个部门把案子处理完再返回给调用者。这样对于调用者来说,处理的过程是完全透明的。
   老狗偏爱责任链模式,是因为这个模式至少体现了设计原则中的三条:
   1. 接口隔离原则:责任链上的每个对象不多不少,该干的事都要干,不该干的事坚决不干;
   2. 迪米特原则:最少知道,每个对象只知道自己能不能处理这个案子,不能处理,就丢给下一个对象,至于下一个对象能不能处理、怎么处理,不知道也不用去知道;
   3. 开闭原则:责任链模式完美的体现了开闭原则,当要处理的业务发生了改变,特别是增加了新的业务,无需改写原有的处理类,增加一个新类并添加到责任链上即可。要修改的地方仅仅是组装责任链的部分,如果把组装责任链写成可配置式的,连这部分代码都不需要修改。
   实际上责任链模式众狗狗们不应该陌生,J2EE框架的Filter类就是典型的责任链模式,大家可以去研究一下。
   责任链模式可以应用在你想不到的地方,老狗用实例来说明,老狗的微信快速开发框架项目中就用到了责任链模式,解决什么问题呢?你想都想不到,老狗用来解析Xml!请看下面的例子:

package com.halo.wechat.xml.utils.converters;

import org.w3c.dom.Node;

import com.halo.wechat.xml.u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值