【设计模式】15.职责链模式

职责链模式

  职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

结构图:

【设计模式】15.职责链模式

例:

public abstract class Manager {        // Handler(管理者)
    protected Manager superior;        // 上级(Successor)

    public void setSuperior(Manager superior) {
        this.superior = superior;
    }

    abstract public void handleRequest(String request,int days);

}
public class CommonManager extends Manager {         // ConcreteHandler(经理)
    @Override
    public void handleRequest(String request,int days) {
        if(request.equals("请假") && days<=3){           // 3天以内的请假经理可以批准
            System.out.println(days+"天的请假在经理处被批准");
        }else if(request.equals("请假") && days>3 && days<=7 ){ // 4-7天的请假需上级总经理批准
            superior.handleRequest(request,days);
        }
    }
}
public class GeneralManager extends Manager {        // ConcreteHandler(总经理)
    @Override
    public void handleRequest(String request, int days) {
        if(request.equals("请假") && days<7){           // 4-7天以内的请假总经理可以批准
            System.out.println(days+"天的请假在总经理处被批准");
        }else if(request.equals("请假") && days>7){    // 超过7天的不批准(职责链到此结束)
            System.out.println(days+"天的请假不可以批准");
        }
    }
}
public class Test {
    public static void main(String[] args) {
        CommonManager commonManager = new CommonManager();     // 经理
        GeneralManager generalManager = new GeneralManager();  // 总经理
        commonManager.setSuperior(generalManager);             // 设置上级

        commonManager.handleRequest("请假",3);   // 向经理请假
        commonManager.handleRequest("请假",5);   // 向经理请假
    }
}

输出:

3天的请假在经理处被批准
5天的请假在总经理处被批准