责任链模式
责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
案例:
请假: 在企业中请假,一天以下,项目组长签字就可以;1-3天,项目组长签完字,还需要项目经理签字;3天以上,需要项目组长,项目经理,总经理都签字同意。
处理者抽象
public abstract class Handler {
public Handler() {
}
//下一个处理节点
protected Handler nextHandler;
public Handler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
/**
* 抽象处理方法
*/
public abstract void handler(int days);
}
项目组长
public class TL extends Handler{
public TL(Handler nextHandler) {
super(nextHandler);
}
@Override
public void handler(int days) {
System.out.println("项目组长批准请假通过...");
if (days>1){
//提交到下一个节点
nextHandler.handler(days);
}
}
}
项目经理
/**
* 项目经理
*/
public class PM extends Handler{
public PM(Handler nextHandler) {
super(nextHandler);
}
@Override
public void handler(int days) {
System.out.println("项目经理批准请假通过...");
if (days>3){
//提交到下一节点
nextHandler.handler(days);
}
}
}
总经理
public class GM extends Handler {
@Override
public void handler(int days) {
System.out.println("总经理同意请假...");
}
}
测试
public class Test {
public static void main(String[] args) {
Handler handler= new TL(new PM(new GM()));
handler.handler(8);
}
}