[設計模式]責任鏈模式

顧名思義,責任鏈模式(Chain of Responsibility Pattern)爲請求創建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬於行爲型模式。


意圖

避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿着這條鏈傳遞請求,直到有對象處理它爲止。


實現

實現如下
log的分級功能

  • 創建抽象類
    public abstract class AbsLogger{
        protected int level;

        //責任鏈的下一級
        protected AbsLogger nextLogger;

        public void setNextLogger(AbsLogger logger){
            nextLogger = logger;
        }

        public void log(int level,String msg){
            if (this.level <= level){
                show(msg);
            }

            if (nextLogger != null){
                nextLogger.log(level, msg);
            }
        }
        protected abstract void show(String msg);
    }
  • 實現抽象類
    public class InfoLogger extends AbsLogger{
        public InfoLogger(int level) {
            this.level = level;
        }

        @Override
        protected void show(String msg) {
            System.out.println("Info : "+msg);
        }
    }

    public class DebugLogger extends AbsLogger{
        public DebugLogger(int level) {
            this.level = level;
        }

        @Override
        protected void show(String msg) {
            System.out.println("Debug : "+msg);
        }
    }

    public class ErrorLogger extends AbsLogger{
        public ErrorLogger(int level) {
            this.level = level;
        }

        @Override
        protected void show(String msg) {
            System.out.println("Error : "+msg);
        }
    }
  • 使用
    public void main(String... args){
        AbsLogger logger = getAllLogger();

        logger.log(3,"error msg");
        logger.log(2,"debug msg");
        logger.log(1,"info msg");
    }

    private AbsLogger getAllLogger() {
        AbsLogger errorLogger = new ErrorLogger(3);
        AbsLogger debugLogger = new DebugLogger(2);
        AbsLogger infoLogger = new InfoLogger(1);

        errorLogger.setNextLogger(debugLogger);
        debugLogger.setNextLogger(infoLogger);

        return errorLogger;
    }
  • 結果
I/System.out: Error : error msg
I/System.out: Debug : error msg
I/System.out: Info : error msg
I/System.out: Debug : debug msg
I/System.out: Info : debug msg
I/System.out: Info : info msg

資料

菜鳥教程


發佈了88 篇原創文章 · 獲贊 34 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章