责任链模式

1 概念

1 定义

责任链模式为请求创建了一个接收者对象的链。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

类型:行为型

2 应用场景

  • 一个请求需要多个对象中的一个或者多个进行处理

3 优缺点

优点:

  • 责任链可以动态组合

缺点:

  • 责任链太长或者处理时间太长,影响性能

2 代码实现

场景:发布一篇文章后,内容审查者审查内容,审查通过了后,视频审查者审查视频

1
2
3
4
5
6
@Data
public class Article {
private String name;
private String content;
private String video;
}
1
2
3
4
5
6
7
8
public abstract class Approver {
protected Approver approver;

public void setNextApprover(Approver approver){
this.approver = approver;
}
public abstract void check(Article article);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ContentApprover extends Approver {
@Override
public void check(Article article) {
if(StringUtils.isNotEmpty(article.getContent())){
System.out.println(article.getName()+"内容合规,批准");
if(approver != null){
approver.check(article);
}
}else{
System.out.println(article.getName()+"内容不合规,不批准,流程结束");
return;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class VideoApprover extends Approver{
@Override
public void check(Article article) {
if(StringUtils.isNotEmpty(article.getVideo())){
System.out.println(article.getName()+"视频内容合规,批准");
if(approver != null){
approver.check(article);
}
}else{
System.out.println(article.getName()+"视频内容不合规,不批准,流程结束");
return;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test {
public static void main(String[] args) {
Approver contentApprover = new ContentApprover();
Approver videoApprover = new VideoApprover();

Article article = new Article();
article.setName("Java设计模式精讲");
article.setContent("Java设计模式精讲的内容");
article.setVideo("Java设计模式精讲的视频");

contentApprover.setNextApprover(videoApprover);

contentApprover.check(article);
}
}

责任链模式
http://example.com/责任链模式/
作者
Panyurou
发布于
2023年10月4日
许可协议