责任链模式
【摘要】
哈喽,大家好,我是一条。
今天想和大家聊一下责任链模式,在源码中经常看到,应用非常广泛,属于行为型设计模式。
还是老规则哈,建一个maven 工程,并安装lombok依赖和插件。
定义
官方版
...
哈喽,大家好,我是一条。
今天想和大家聊一下责任链模式,在源码中经常看到,应用非常广泛,属于行为型设计模式。
还是老规则哈,建一个maven
工程,并安装lombok
依赖和插件。
定义
官方版
责任链(Chain of Responsibility)模式:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
说人话
首先一个重点是链,可以类比成链表。
那么链表里面放什么呢?放一个个处理器(Handler)。
与审批流程非常相似,当发起一个请求时,需要层层审批(处理),而审批的发起者,并不关心这其中的过程,只想知道结果,就需要将请求者和处理者解耦。
Coding
情景再现
假设我制作了一门课程需要发布到某平台,那首先需要经过审核人员的处理,比如需要对标题、内容、视频等做审核。
下面就用代码模拟这个流程。
新建课程类
/**
* 课程
*/
@Data // lombok注解
public class Course {
private String name;
private String article;
private String video;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
抽象审批者
nextApprove
和链表中的下一个节点异曲同工。
@Data
public abstract class Approve {
// 核心,处理类要包含一个自己作为链的下一个,类似链表
protected Approve nextApprove;
// 交给子类,即具体的处理器实现,所以定义为抽象
public abstract void deploy(Course course);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
实际审批者
public class ArticleApprove extends Approve{
@Override
public void deploy(Course course) {
}
}
public class NameApprove extends Approve{
@Override
public void deploy(Course course) {
}
}
public class VideoApprove extends Approve{
@Override
public void deploy(Course course) {
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
实现处理器方法
@Override
public void deploy(Course course) {
if (course.getVideo()!=null){
System.out.println("video pass!");
// 核心逻辑,调用处理器链的下一个
if (nextApprove != null){
nextApprove.deploy(course);
}
}else {
System.out.println("video fail!");
return;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
测试
public static void main(String[] args) {
// client
Course course = new Course();
course.setVideo("video");
course.setName("name");
// 编排处理器链
ArticleApprove articleApprove = new ArticleApprove();
VideoApprove videoApprove = new VideoApprove();
NameApprove nameApprove = new NameApprove();
nameApprove.setNextApprove(articleApprove);
articleApprove.setNextApprove(videoApprove);
// 真正处理
nameApprove.deploy(course);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
类图
源码
- Filter MVC中的Filter相信大家都不陌生。
- Sentinal 核心也是责任链模式。
- 包括Aop也是责任链。
下一期实现完整责任链——Filter。
文章来源: blog.csdn.net,作者:一条coding,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/skylibiao/article/details/125225617
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)