课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
责任链模式是程序员在学习软件设计模式的时候需要重点掌握的一个设计模式,下面我们就通过案例分析来简单了解一下,责任链模式的概念与应用场景分析。
责任链模式是一种理解上比较简单的行为设计模式,它允许开发者通过处理者链进行顺序发送,每个链节点在收到请求后,具备两种能力:
对其进行处理(消费)
将其传递给链上的下个处理者
当你想要让一个以上的对象有机会能处理某个请求时,就可以使用责任链模式。通过责任链模式,为某个请求创建一个对象链,每个对象链依序检查此请求,并对其进行处理,或者将它传给链中的下一个对象。
从某种生活场景中理解,就像患者去医院看病,传统上可能会经历从挂号到医生问诊再到抽血拍片再到医生复诊以及终药房拿药的过程。
从生活经验上可以看出,责任链上每个节点的产物是不同的(当然也可以相同,但相同的话就没必要通过责任链去处理了,可能放在单个对象中会更合适),像链表结构一样,每个节点除了需要包含指向下一个链节点的索引以及必要时终止传递的能力外,还需要具备传递给下一个节点的产物的能力。如何针对不同的业务场景对链节点的产物进行抽象,也成为了代码编写中的一个问题,为什么会成为一个问题?因为使用责任链的一大优势就是我们可以动态地去新增或删除链节点以达到业务能力的扩展,如果我们对输出的产物定义的不够清晰,就会导致在做链式扩展时,相关的产物代码会变得更加复杂导致代码的可读性降低。
责任链到底解决了什么问题?
前置检查,减少不必要的后置代码逻辑
发送者(sender)和接收者(receiver(s))的逻辑解耦,提高代码灵活性,这一点是重要的
通过链路顺序传递请求,也使每一个链节点职责明确,符合单一职责原则
通过改变链内的成员或调动它们的次序,允许你动态地新增或删除,也提高了代码的灵活性
适用场景
其实只要涉及到逻辑顺序处理的,都可以使用责任链模式来处理。但从实际场景出发,决定是否使用该模式要考虑一下两个因素:
场景是不是够复杂,逻辑链是不是很长
是否有灵活变化的业务变化场景需求
同时还要注意使用责任链不可避免带来的三个问题:
处理者的数量问题。对链中请求处理者的遍历,如果处理者太多那么遍历必定会影响性能,特别是在一些递归调用中,所以要慎重
代码出现问题时,不容易观察运行时的特征,有碍于排查问题
需要cover请求即使传递到链尾端也一直没被处理,从而导致的一些异常问题
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。