责任链模式
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.chainofresponsibility;
|
||||
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
|
||||
/**
|
||||
* 模拟二级审批场景
|
||||
* <p>
|
||||
* 审批抽象
|
||||
* <p>
|
||||
* java 过滤器实现 {@link javax.servlet.Filter#doFilter(ServletRequest, ServletResponse, FilterChain)}
|
||||
* 实现 {@link FilterChain#doFilter(ServletRequest, ServletResponse)} 接口的组成一条过滤器链
|
||||
* 所有子类通过调用 chain.doFilter(request, response) 实现链式传递
|
||||
* <p>
|
||||
* SpringSecurity过滤器链实现也类似
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/21 16:59
|
||||
*/
|
||||
public abstract class Approver {
|
||||
/**
|
||||
* 责任链核心:包含与自身相同的类型对象
|
||||
*/
|
||||
protected Approver approver;
|
||||
|
||||
/**
|
||||
* 设置下一个节点,组成链条
|
||||
*
|
||||
* @param approver
|
||||
*/
|
||||
public void setNextApprover(Approver approver) {
|
||||
this.approver = approver;
|
||||
}
|
||||
|
||||
/**
|
||||
* 交由子类实现
|
||||
*
|
||||
* @param course
|
||||
*/
|
||||
public abstract void deploy(Course course);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.chainofresponsibility;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* 手记审批
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/21 16:59
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.chainofresponsibility;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 课程
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/21 16:59
|
||||
*/
|
||||
@Data
|
||||
public class Course {
|
||||
private String name;
|
||||
|
||||
private String article;
|
||||
|
||||
private String video;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.chainofresponsibility;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* 视频审批
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/21 16:59
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.chainofresponsibility;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* @author F嘉阳
|
||||
* @date 2020/7/21 15:06
|
||||
*/
|
||||
class ChainofResponsibilityTest {
|
||||
|
||||
@Test
|
||||
void doTest() {
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user