責任鏈模式(Chain Of Responsibility)

責任鏈模式git

一. 責任鏈模式

1.1 定義

  • 在責任鏈模式中,許多對象由每一個對象及其對下家的引用而鏈接起來造成一條鏈.請求在這個鏈上傳遞,知道其中的某一個對象決定處理此請求.

1.2 角色

  • 抽象處理者角色(Handler).
  • 具體處理者角色(ConcertHandler).

1.3 純與不純github

  • 純的責任鏈模式:要麼處理,要麼讓下家處理,而不能處理了一部分在交由下家處理.
  • 不純的責任鏈模式:請求最終可不被任何對象處理.

二. 具體實現

2.1 建立抽象處理者角色

public abstract class Handler {
        protected Handler nextHandler = null;
        public abstract void handle();
        public Handler getNextHandler() {
            return nextHandler;
        }
        public void setNextHandler(Handler nextHandler) {
            this.nextHandler = nextHandler;
        }
    }

2.2 建立具體處理者角色

public class HandlerA extends Handler{
        @Override
        public void handle() {
            if(nextHandler == null){
                System.out.println("HandlerA handle ...");
            }else{
                nextHandler.handle();
            }
        }
    }
    public class HandlerB extends Handler{
        @Override
        public void handle() {
            if(nextHandler == null){
                System.out.println("HandlerB handle ...");
            }else{
                nextHandler.handle();
            }
        }
    }

2.3 調用

public static void main(String[] args) {
        Handler handlerA = new HandlerA();
        Handler handlerB = new HandlerB();
        handlerA.setNextHandler(handlerB);
        handlerA.handle();
    }

2.4 輸出

HandlerB handle ...

三. 優缺點

3.1 優勢

  • 下降耦合度.
  • 簡化對象.
  • 加強對象指派職責的靈活性.

3.2 缺點

  • 請求不必定接受.
  • 對性能有影響.

四. 源碼

https://github.com/Seasons20/DisignPattern.git

ENDide

相關文章
相關標籤/搜索