public abstract class Handler {
/*指向下一个请求处理着*/
protected Handler successor;
/*可获批的资金*/
public abstract int capital();
/*对申请的资金进行处理*/
public abstract void handle(int money);
/*
因为对于处理的请求判断,逻辑都是一样的,所以应该抽象出来,并且设置为不可覆盖
处理请求,若能处理就处理,若不能就传递给下一个处理者
*/
public final void handleRequest(int money) {
if (money <= capital()) {
handle(money);
} else {
if (null != successor) {
successor.handleRequest(money);
} else {
/*若没有下一个处理者则说明该请求无法传递且无法处理*/
System.out.println("你的请求的资金无法获批");
}
}
}
}
然后,分别构建出:实验室指导老师,学院书记,院长,校长
实验室指导老师
public class Tutor extends Handler {
@Override
public int capital() {
return 100;
}
@Override
public void handle(int money) {
System.out.println("指导老师审批通过:获批 " + money + "元");
}
}
学院书记
public class Secretary extends Handler{
@Override
public int capital() {
return 1000;
}
@Override
public void handle(int money) {
System.out.println("书记审批通过:获批 " + money + "元");
}
}
院长
public class Dean extends Handler {
@Override
public int capital() {
return 5000;
}
@Override
public void handle(int money) {
System.out.println("院长审批通过:获批 " + money + "元");
}
}
校长
public class Principal extends Handler {
@Override
public int capital() {
return 20000;
}
@Override
public void handle(int money) {
System.out.println("校长审批通过:获批 " + money + "元");
}
}
最后,只需要初始化并构建处理者之间的关系即可
// 初始化各个处理者
Tutor tutor = new Tutor();
Secretary secretary = new Secretary();
Dean dean = new Dean();
Principal principal = new Principal();
// 让各个处理者之间形成链式关系
tutor.successor = secretary;
secretary.successor = dean;
dean.successor = principal;
principal.successor = null;