1. 创建责任链上下文
@Data
@AllArgsConstructor
public class LeaveRequest {
private String name;
private Integer day;
}
2. 创建责任链抽象类
@Data
public abstract class AbstractHandler {
protected String name;
protected AbstractHandler nextHandler;
public AbstractHandler(String name) {
this.name = name;
}
public abstract boolean process(LeaveRequest request);
}
3. 创建责任链处理类
public class DirectorHandler extends AbstractHandler{
public DirectorHandler(String name) {
super(name);
}
@Override
public boolean process(LeaveRequest request) {
System.out.println(name + "审批通过");
return nextHandler.process(request);
}
}
public class Manager extends AbstractHandler{
public Manager(String name) {
super(name);
}
@Override
public boolean process(LeaveRequest request) {
System.out.println(name + "审批通过");
if(request.getDay() <= 3){
return true;
}
return nextHandler.process(request);
}
}
public class TopManager extends AbstractHandler{
public TopManager(String name) {
super(name);
}
@Override
public boolean process(LeaveRequest request) {
System.out.println(name + "审批通过");
return true;
}
}
4. 使用
public class Test {
public static void main(String[] args) {
DirectorHandler directorHandler = new DirectorHandler("p6");
Manager manager = new Manager("p7");
TopManager topManager = new TopManager("p8");
directorHandler.setNextHandler(manager);
manager.setNextHandler(topManager);
directorHandler.process(new LeaveRequest("张三",6));
}
}
输出:
p6审批通过
p7审批通过
p8审批通过
如果请假天数改为2天
directorHandler.process(new LeaveRequest("张三",2));
输出结果为:
p6审批通过
p7审批通过