我是靠谱客的博主 外向钢笔,最近开发中收集的这篇文章主要介绍java设计模式精讲 Debug 方式+内存分析 第25章 责任链模式讲解25-1 责任链模式讲解25-2 责任链模式coding25-3 责任链模式源码-servlet,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
责任链模式
- 25-1 责任链模式讲解
- 25-2 责任链模式coding
- 25-3 责任链模式源码-servlet
25-1 责任链模式讲解
25-2 责任链模式coding
我们引入一个业务场景:我们的线上的课程在发布的时候,要经过两个人个批准,一个手记的检查人,另外一个是视频的检查人,我们在ao系统里面也会遇到这种情况,一级一级的进行审批;这个就是一个链条;
有一个课程类:
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 + ''' +
'}';
}
}
还有一个批准者抽象类:
/**
* 批准者
*/
public abstract class Approver {
/** 责任链的核心就是在类里面包含了一个自己同样类型的一个对象 */
protected Approver approver;
public void setNextApprover(Approver approver) {
this.approver = approver;
}
public abstract void deploy(Course course) ;
}
一个是手记的批准者:
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;
}
}
}
一个是视频的批准者:
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;
}
}
}
这个就是现在的类图:
这个就是测试的代码:
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设计模式精讲含有视频,批准
现在,我们没有手记,我们再来看看测试结果:
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设计模式精讲不含有手记,不批准,流程结束
我们再来看看有手记,没有视频的情况:
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设计模式精讲 Debug 方式+内存分析 第25章 责任链模式讲解25-1 责任链模式讲解25-2 责任链模式coding25-3 责任链模式源码-servlet所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复