zoukankan      html  css  js  c++  java
  • 责任链模式-Chain of Responsibility Pattern

            责任链模式(Chain of Responsiblity Pattern) 为这种请求创建了一个接受者的链。这种模式给予请求的类型

    这种模式给予请求的类型 对请求的发送者和接受者进行解偶。 这种类型的设计模式属于行为模式。

           在这种模式中,通常每个接受者都包含对另一个接受者的引用 如果一个对象不能处理该请求  那么它会把相同的请求传递给下一个请求。 

           意图:避免请求发送者与接受者耦合在一起,让多个对象有可能接受请求将这些连成一条链,并且沿着这条链传递请求,直到有对象处理为值。 

          下面是demo.

    package com.royan.weakey.platform.pattern.chainResponsibility;
    
    import lombok.Data;
    import lombok.extern.slf4j.Slf4j;
    
    /**
     * 责任链模式(Chain of Responsibility Pattern)
     * 为请求创建了一个接受者对象的链。这种模式给予请求的类型
     * 这种模式给予请求的类型 对请求的发送者和接受者进行解偶。
     * 这种类型的设计模式属于行为模式
     * <p>
     * 在这种模式中,通常每个接受者都包含对另一个接受者的引用
     * 如果一个对象不能处理该请求 那么它会把相同的请求下一个接收者
     * <p>
     * 意图:避免请求发送者与接受者耦合在一起,让多个对象有可能接受请求
     * 将这些连成一条链,并且沿着这条链传递请求  直到有对象处理它为止。
     */
    @Slf4j
    @Data
    public abstract class
    AbstractLogger {
        enum LogLevel {
            INFO(1),
            DEBUG(2),
            ERROR(3);
            private int code;
    
            LogLevel(int code) {
                this.code = code;
            }
    
            private int getCode() {
                return code;
            }
        }
    
        public AbstractLogger(LogLevel logLevel) {
            this.logLevel = logLevel;
        }
    
        private LogLevel logLevel;
        protected AbstractLogger nextLogger;
    
    
        public void logMessage(LogLevel level, String message) {
            if (this.logLevel.getCode() <= level.getCode())
                write(message);
            if (nextLogger != null)
                nextLogger.logMessage(level, message);
        }
    
        abstract protected void write(String message);
    
    
    }
    package com.royan.weakey.platform.pattern.chainResponsibility;
    
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class ErrorLogger extends AbstractLogger {
    
        public ErrorLogger(LogLevel logLevel) {
            super(logLevel);
        }
    
        @Override
        protected void write(String message) {
            log.info("Error Console::Logger-{}", message);
        }
    }
    package com.royan.weakey.platform.pattern.chainResponsibility;
    
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class FileLogger extends AbstractLogger {
    
        public FileLogger(LogLevel logLevel) {
            super(logLevel);
        }
    
        @Override
        protected void write(String message) {
            log.info("File::Logger-{}", message);
        }
    }
    package com.royan.weakey.platform.pattern.chainResponsibility;
    
    import lombok.Data;
    import lombok.extern.slf4j.Slf4j;
    
    
    @Slf4j
    public class ConsoleLogger extends AbstractLogger {
    
        public ConsoleLogger(LogLevel logLevel) {
            super(logLevel);
        }
    
        @Override
        protected void write(String message) {
            log.info("Standard Console::Logger-{}", message);
        }
    
    
    }
    package com.royan.weakey.platform.pattern.chainResponsibility;
    
    public class ChainPatternDemo {
        private static AbstractLogger getChainOfLoggers() {
            AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.LogLevel.ERROR);
            AbstractLogger fileLogger = new FileLogger(AbstractLogger.LogLevel.DEBUG);
            AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.LogLevel.INFO);
            errorLogger.setNextLogger(fileLogger);
            fileLogger.setNextLogger(consoleLogger);
            return errorLogger;
        }
    
    
        public static void main(String[] args) {
            AbstractLogger loggerChain = getChainOfLoggers();
            loggerChain.logMessage(AbstractLogger.LogLevel.INFO, "This is an info information");
            loggerChain.logMessage(AbstractLogger.LogLevel.DEBUG, "This is a debug level information.");
            loggerChain.logMessage(AbstractLogger.LogLevel.ERROR, "This is an error information.");
        }
    
    }
  • 相关阅读:
    c++ vs2019中编写nasm
    CF1242 A. Tile Painting题解(gcd)
    康托展开与逆康托展开
    CF 1459B Move and Turn 题解(思维)
    杨辉三角小性质
    CF 1028C Rectangles 题解(思维)
    Educational Codeforces Round 107 题解(A-E)
    HDU 5649 DZY Love Sorting 题解(二分套线段树)
    CF1336D Two Divisors 题解(gcd性质)
    题解 BZOJ1233 【[Usaco2009Open]干草堆tower】
  • 原文地址:https://www.cnblogs.com/caibixiang123/p/10545844.html
Copyright © 2011-2022 走看看