type
status
date
slug
summary
tags
category
icon
password
AI summary
一、定义

责任链模式:通过对前一个对象记住下一个对象的引用形成的链路,沿着链路,直到找到对象处理请求。
二、示例:
模拟场景:
1、程序员需要请假,无论请多少天的假,开发领导都需要审批。请假的天数大于3天,小于等于10,开发经理需要审批。请假天数10天以上的,公司老板需要审批。

传统编码
if 语句全写在一个方法里面,随着审批角色的新增,if语句也变多。代码冗余,难维护
责任链模式设计
每个对象只需要关注自己和下一个对象请求触发的条件
定义抽象类,等待被实现,子类可以定义下一个对象,设计具体触发条件
开发领导只关心,下一个审批角色:开发经理的触发条件
开发经理只关心,下一个审批角色:老板的触发条件
老板无需关注其他的触发条件
测试:
ApiTest
UML关系图

总结:
从上⾯代码从if语句重构到使⽤责任链模式开发可以看到,我们的代码结构变得清晰⼲净了,
也解决了⼤量if语句
的使⽤。并不是if语句不好,只不过if语句并不适合做系统流程设计,但是在做判断和⾏为逻辑处理中还是⾮常可以使⽤的。
在我们前⾯学习结构性模式中讲到过组合模式,它像是⼀颗组合树⼀样,我们搭建出⼀个流程决策树。其实这样的模式也是可以和责任链模型进⾏组合扩展使⽤,⽽这部分的重点在于如何关联链路的关联,最终的执⾏都是在执⾏在中间的关系链。
责任链模式很好的处理单⼀职责和开闭原则,简单了耦合也使对象关系更加清晰,⽽且外部的调⽤⽅并不需要关⼼责任链是如何进⾏处理的(以上程序中可以把责任链的组合进⾏包装,在提供给外部使⽤)。但除了这些优点外也需要是适当的场景才进⾏使⽤,避免造成性能以及编排混乱调试测试疏漏问题。
- 作者:IT小舟
- 链接:https://www.codezhou.top/article/JAVA%E3%80%90%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%91%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。