目录
-
目的
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将他们连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。
-
应用实例
- 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递。
- 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