关于Java 设计模式 责任链模式 Chain of Responsibility

关于Java 设计模式 责任链模式 Chain of Responsibility

1、AbstractLogger.java

package com.ssm.cts.pattern.chain;

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 void setNextLogger(AbstractLogger nextLogger) {
    this.nextLogger = nextLogger;
  }

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

  abstract protected void write(String message);
}

2、ConsoleLogger.java

package com.ssm.cts.pattern.chain;

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

  @Override
  protected void write(String message) {
    System.out.println("ConsoleLogger: " + message);
  }
}

3、FileLogger.java

package com.ssm.cts.pattern.chain;

public class FileLogger extends AbstractLogger {
  public FileLogger(int level) {
    this.level = level;
  }

  @Override
  protected void write(String message) {
    System.out.println("FileLogger: " + message);
  }

}

4、ErrorLogger.java

package com.ssm.cts.pattern.chain;

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

  @Override
  protected void write(String message) {
    System.out.println("ErrorLogger: " + message);
  }

}

5、Demo.java

package com.ssm.cts.pattern.chain;

public class Demo {
  private static AbstractLogger getChainOfLoggers() {

    AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
    AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
    AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);

    errorLogger.setNextLogger(fileLogger);
    fileLogger.setNextLogger(consoleLogger);

    return errorLogger;
  }

  // 测试
  public static void main(String[] args) {
    AbstractLogger loggerChain = getChainOfLoggers();

    //loggerChain.logMessage(AbstractLogger.INFO, "普通信息");

    //loggerChain.logMessage(AbstractLogger.DEBUG, "调试信息");

    loggerChain.logMessage(AbstractLogger.ERROR, "异常信息");
  }
}

 

发表回复

您的电子邮箱地址不会被公开。