源代码
GitHub源代码
1.本文目标
本文目标是为了让大家认识并理解责任链模式
2.基本套路
定义:为请求创建一个接受此次请求对象的链
类型:行为型
选择关键点:对于每一次请求是否每个处理的对象都需要一次处理机会
设计原则:遵循迪米特
使用概率:15%
难度系数:中
3.适用场景
1.一个请求的处理需要多个对象当中的一个或几个协作处理
4.使用步骤
用栗子能更好的说明问题,请继续往下看
5.举个栗子
我们用具体的代码去更好的理解这个设计模式
5.1栗子说明
- 背景:在网站上发布一个课程,需要两个人检查,一个是视频,一个是手记
- 目的:用责任链模式模
5.2使用步骤
实现代码如下:
步骤1.创建课程类
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 + '\'' +
'}';
}
}
步骤2.创建抽象的批准者类
public abstract class Approver {
protected Approver approver;
public void setNextApprover(Approver approver){
this.approver = approver;
}
public abstract void deploy(Course course);
}
步骤3. 创建手记批准者和视频批准者
public class ArticleApprover extends Approver {
@Override
public void deploy(Course course) {
if (StringUtils.isNotEmpty(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.isNotEmpty(course.getVideo())) {
System.out.println(course.getName() + "含有视频,批准");
if (approver != null) {
approver.deploy(course);
}
} else {
System.out.println(course.getName() + "不含有视频,不批准,流程结束");
return;
}
}
}
步骤4. 测试
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);
}
6.优点
- 请求的发送者和接受者(请求的处理者)解耦
- 责任链可以动态组合
7.缺点
- 责任链太长或者处理时间过长,影响性能
- 责任链有可能过多
8.总结
本文只是对责任链模式进行一个分享,接下来会从创建型模式,结构型模式,行为型模式,这三大类展开一个系列分享,大家可以持续进行关注,信仰年輕的设计模式,蟹蟹啦。
网友评论