Java设计模式—职责链模式(Chain of Responsibility)

目录

目的

应用实例

代码 


  • 目的

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将他们连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。

  • 应用实例

  1. 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递。
  2. Servlet的过滤器Fileter。
  • 代码 

package com.gary.pattern.chain;

/**
 * describe:抽象记录器类
 *
 * @author gary
 * @date 2018/12/23
 */
public abstract class AbstractLogger {
    public static int INFO = 1;
    public static int DEBUG = 2;
    public static int ERROR = 3;

    protected int level;
    protected AbstractLogger nextLogger;

    public AbstractLogger setNextLogger(AbstractLogger nextLogger) {
        this.nextLogger = nextLogger;
        return this;
    }

    public void logMessage(int level, String message) {
        if (level >= this.level) {
            write(message);
        }
        if (nextLogger != null) {
            nextLogger.logMessage(level, message);
        }
    }

    abstract public void write(String message);
}
package com.gary.pattern.chain;

/**
 * describe:记录器类的实现类
 *
 * @author gary
 * @date 2018/12/23
 */
public class ErrorLogger extends AbstractLogger {

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


    @Override
    public void write(String message) {
        System.out.println("ErrorLogger:" + message);
    }
}
package com.gary.pattern.chain;

/**
 * describe:记录器类的实现类
 *
 * @author gary
 * @date 2018/12/23
 */
public class DebugLogger extends AbstractLogger {

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


    @Override
    public void write(String message) {
        System.out.println("DebugLogger:" + message);
    }
}
package com.gary.pattern.chain;

/**
 * describe:记录器类的实现类
 *
 * @author gary
 * @date 2018/12/23
 */
public class ConsoleLogger extends AbstractLogger {

    public ConsoleLogger(int level) {
        this.level = level;
    }


    @Override
    public void write(String message) {
        System.out.println("ConsoleLogger:" + message);
    }
}
package com.gary.pattern.chain;

/**
 * describe:记录器链测试Demo
 *
 * @author gary
 * @date 2018/12/23
 */
public class ChainDemo {

    /**
     * 创建不同类型的记录器,赋予不同级别,并每个记录器设置下一个记录器。
     *
     */
    private static AbstractLogger getChainOfLoggers() {
        return new ErrorLogger(AbstractLogger.ERROR)
            .setNextLogger(new DebugLogger(AbstractLogger.DEBUG)
            .setNextLogger(new ConsoleLogger(AbstractLogger.INFO)));
    }

    public static void main(String[] args) {

        AbstractLogger chainOfLogger = getChainOfLoggers();

        chainOfLogger.logMessage(AbstractLogger.INFO, "This is an info information");

        chainOfLogger.logMessage(AbstractLogger.DEBUG, "This is an dubug information");

        chainOfLogger.logMessage(AbstractLogger.ERROR, "This is an error information");
    }
}

ConsoleLogger:This is an info information
DebugLogger:This is an dubug information
ConsoleLogger:This is an dubug information
ErrorLogger:This is an error information
DebugLogger:This is an error information
ConsoleLogger:This is an error information

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/gary0917/article/details/85221487
今日推荐