基础与定义
- 为请求创建一个接收此处请求的对象链
- 类型:行为型
使用场景
- 一个请求的处理需要多个对象当中的一个或几个协作的过程
优点:
- 责任链可以动态组合
- 请求的发送者和接受者解耦
源码实例
- java.serverlet.Filter
代码实例
发布一个课程,需要判断该课程是否有名称和手记,必须都有才能发布
@Data
public class Course {
private String name;
private String article;
}
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 (course.getArticle() != null){
System.out.println(course.getName() +"包含手记,批准");
if (approver != null){
approver.deploy(course);
}
}else {
System.out.println("不包含手记不批准,流程结束");
}
}
}
public class NameApprover extends Approver {
@Override
public void deploy(Course course) {
if (course.getName() != null){
System.out.println(course.getName() +"包含名称,批准");
if (approver != null){
approver.deploy(course);
}
}else {
System.out.println("不包含名称不批准,流程结束");
}
}
}
// 使用
public class Test {
public static void main(String[] args){
Course course = new Course();
course.setArticle("123");
//course.setName("Java");
Approver approver = new ArticleApprover();
approver.setNextApprover(new NameApprover());
approver.deploy(course);
}
}