我是靠谱客的博主 外向钢笔,这篇文章主要介绍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
39public 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
16public 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
15public 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
15public 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
15public 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
15public 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设计模式精讲内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复