type
status
date
slug
summary
tags
category
icon
password

一、定义

notion image
责任链模式:通过对前一个对象记住下一个对象的引用形成的链路,沿着链路,直到找到对象处理请求。

二、示例:

模拟场景: 1、程序员需要请假,无论请多少天的假,开发领导都需要审批。请假的天数大于3天,小于等于10,开发经理需要审批。请假天数10天以上的,公司老板需要审批。
notion image

传统编码

if 语句全写在一个方法里面,随着审批角色的新增if语句也变多。代码冗余,难维护

责任链模式设计

每个对象只需要关注自己和下一个对象请求触发的条件 定义抽象类,等待被实现,子类可以定义下一个对象,设计具体触发条件
开发领导只关心,下一个审批角色:开发经理的触发条件
开发经理只关心,下一个审批角色:老板的触发条件
老板无需关注其他的触发条件
测试:ApiTest

UML关系图

notion image
总结: 从上⾯代码从if语句重构到使⽤责任链模式开发可以看到,我们的代码结构变得清晰⼲净了,
也解决了⼤量if语句
的使⽤。并不是if语句不好,只不过if语句并不适合做系统流程设计,但是在做判断和⾏为逻辑处理中还是⾮常可以使⽤的。
在我们前⾯学习结构性模式中讲到过组合模式,它像是⼀颗组合树⼀样,我们搭建出⼀个流程决策树。其实这样的模式也是可以和责任链模型进⾏组合扩展使⽤,⽽这部分的重点在于如何关联链路的关联,最终的执⾏都是在执⾏在中间的关系链。
责任链模式很好的处理单⼀职责和开闭原则,简单了耦合也使对象关系更加清晰,⽽且外部的调⽤⽅并不需要关⼼责任链是如何进⾏处理的(以上程序中可以把责任链的组合进⾏包装,在提供给外部使⽤)。但除了这些优点外也需要是适当的场景才进⾏使⽤,避免造成性能以及编排混乱调试测试疏漏问题。
 
JAVA【设计模式】享元模式JAVA【设计模式】命令模式
IT小舟
IT小舟
微信公众号:IT小舟
公告
type
status
date
slug
summary
tags
category
icon
password
notion image
你好,我是小舟。 欢迎来到我的博客,我喜欢运动、阅读、音乐和写作。如果有什么想要交流的,可以加我微信:upcodezhou。再次感谢你的光临!
notion image