我是靠谱客的博主 外向钢笔,这篇文章主要介绍java设计模式精讲 Debug 方式+内存分析 第25章 责任链模式讲解25-1 责任链模式讲解25-2 责任链模式coding25-3 责任链模式源码-servlet,现在分享给大家,希望可以做个参考。

责任链模式

  • 25-1 责任链模式讲解
  • 25-2 责任链模式coding
  • 25-3 责任链模式源码-servlet

25-1 责任链模式讲解

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


25-2 责任链模式coding

我们引入一个业务场景:我们的线上的课程在发布的时候,要经过两个人个批准,一个手记的检查人,另外一个是视频的检查人,我们在ao系统里面也会遇到这种情况,一级一级的进行审批;这个就是一个链条;


有一个课程类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Course { private String name; private String article; private String video; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getArticle() { return article; } public void setArticle(String article) { this.article = article; } public String getVideo() { return video; } public void setVideo(String video) { this.video = video; } @Override public String toString() { return "Course{" + "name='" + name + ''' + ", article='" + article + ''' + ", video='" + video + ''' + '}'; } }

还有一个批准者抽象类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/** * 批准者 */ public abstract class Approver { /** 责任链的核心就是在类里面包含了一个自己同样类型的一个对象 */ protected Approver approver; public void setNextApprover(Approver approver) { this.approver = approver; } public abstract void deploy(Course course) ; }

一个是手记的批准者:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ArticleApprover extends Approver{ @Override public void deploy(Course course) { if (StringUtils.isNoneEmpty(course.getArticle())) { System.out.println(course.getName() + "含有手记,批准"); if (approver != null) { approver.deploy(course); } } else { System.out.println(course.getName() + "不含有手记,不批准,流程结束"); return; } } }

一个是视频的批准者:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class VideoApprover extends Approver { @Override public void deploy(Course course) { if (StringUtils.isNoneEmpty(course.getVideo())) { System.out.println(course.getName() + "含有视频,批准"); if (approver != null) { approver.deploy(course); } } else { System.out.println(course.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 articleApprover = new ArticleApprover(); Approver videoApprover = new VideoApprover(); Course course = new Course(); course.setName("Java设计模式精讲"); course.setArticle("Java设计模式精讲的手记"); course.setVideo("Java设计模式精讲的视频"); /** 先通过手记的审核才交给视频的审核,视频的审核过了才能进行发布上线 */ articleApprover.setNextApprover(videoApprover); articleApprover.deploy(course); } }

测试结果如下:

Java设计模式精讲含有手记,批准
Java设计模式精讲含有视频,批准

现在,我们没有手记,我们再来看看测试结果:

复制代码
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 articleApprover = new ArticleApprover(); Approver videoApprover = new VideoApprover(); Course course = new Course(); course.setName("Java设计模式精讲"); //course.setArticle("Java设计模式精讲的手记"); course.setVideo("Java设计模式精讲的视频"); /** 先通过手记的审核才交给视频的审核,视频的审核过了才能进行发布上线 */ articleApprover.setNextApprover(videoApprover); articleApprover.deploy(course); } }

现在的就是没有手记的测试结果:

Java设计模式精讲不含有手记,不批准,流程结束

我们再来看看有手记,没有视频的情况:

复制代码
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 articleApprover = new ArticleApprover(); Approver videoApprover = new VideoApprover(); Course course = new Course(); course.setName("Java设计模式精讲"); course.setArticle("Java设计模式精讲的手记"); //course.setVideo("Java设计模式精讲的视频"); /** 先通过手记的审核才交给视频的审核,视频的审核过了才能进行发布上线 */ articleApprover.setNextApprover(videoApprover); articleApprover.deploy(course); } }

测试结果如下:

Java设计模式精讲含有手记,批准
Java设计模式精讲不含有视频,不批准,流程结束

25-3 责任链模式源码-servlet

在这里插入图片描述


在这里插入图片描述

SpringSecurity里面也是大量的使用到了责任链模式;

最后

以上就是外向钢笔最近收集整理的关于java设计模式精讲 Debug 方式+内存分析 第25章 责任链模式讲解25-1 责任链模式讲解25-2 责任链模式coding25-3 责任链模式源码-servlet的全部内容,更多相关java设计模式精讲内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部