1. 程式人生 > >責任鏈設計模式

責任鏈設計模式

什麽 ger 總經理 extends resp 重要 減少 pri rep

定義:多個對象都有機會處理請求,避免請求的處理者和請求的發送者耦合。當一個請求到來的時候,遍歷責任鏈,找到第一個能夠處理該請求的處理者。

優點:避免請求者和處理者耦合;方便的增加或減少處理者。

角色:請求者 抽象處理者 具體處理者

  抽象處理者定義了一個處理者需要具備的兩個重要屬性:1、什麽條件下一個處理者能夠處理請求 2、如果該處理者無法處理請求,應該把請求轉發給哪一個處理者

package ChainOfResponsibility;

public abstract class Handler {
    private Handler nextHandler;
    
private int maxDay; public void handlerRequest(int day){ if (day<=maxDay){ reply(day); }else { if (nextHandler!=null){ nextHandler.handlerRequest(day); }else { System.out.println("沒有更高的權限了"); } } }
public abstract void reply(int day); public Handler getNextHandler() { return nextHandler; } public void setNextHandler(Handler nextHandler) { this.nextHandler = nextHandler; } public int getMaxDay() { return maxDay; } public void
setMaxDay(int maxDay) { this.maxDay = maxDay; } }

  不同的具體處理者繼承抽象處理者

package ChainOfResponsibility;

public class BigManager extends Handler
{
    @Override
    public void reply(int day) {
        System.out.println("我是總經理,我批了 "+day);
    }
}
package ChainOfResponsibility;

public class DepartManager extends Handler  {
    @Override
    public void reply(int day) {
        System.out.println("我的部門經理 我批了 "+day);
    }
}
package ChainOfResponsibility;

public class ProjectManager extends Handler {
    @Override
    public void reply(int day) {
        System.out.println("我是項目經理 我批了 "+day);
    }
}

  在測試方法中,需要把多個具體處理者連接成一個鏈,連接成鏈的關鍵是為每一個處理者添加後繼

package ChainOfResponsibility;

public class test {
    public static void main(String[] args) {
        BigManager bigManager = new BigManager();
        bigManager.setMaxDay(10);
        DepartManager departManager = new DepartManager();
        departManager.setMaxDay(5);
        ProjectManager projectManager = new ProjectManager();
        projectManager.setMaxDay(3);

        projectManager.setNextHandler(departManager);
        departManager.setNextHandler(bigManager);
        bigManager.setNextHandler(null);

        projectManager.handlerRequest(2);
        projectManager.handlerRequest(4);
        projectManager.handlerRequest(9);
        projectManager.handlerRequest(90);
    }
}

責任鏈設計模式