职责链模式
public abstract class Logger {
public static final int ERROR = 0;
public static final int DEBUG = 1;
public static final int INFO = 2;
public static final int VERBOSE = 3;
protected int level;
protected Logger nextLogger;
public void setNextLogger(Logger logger) {
this.nextLogger = logger;
}
public void logMessage(int level , String message) {
if (this.level == level) {
printMsg(message);
} else if (nextLogger!=null) {
nextLogger.logMessage(level, message);;
}else {
System.err.println("Unknow Error");
}
}
public abstract void printMsg(String msg) ;
}
具体实现每一个等级的log
public class VerboseLogger extends Logger{
public VerboseLogger(int level) {
this.level = level;
}
@Override
public void printMsg(String msg) {
System.out.println("VERBOSE:"+msg);
}
}
public class InfoLogger extends Logger{
public InfoLogger(int level) {
this.level = level;
}
@Override
public void printMsg(String msg) {
System.out.println("INFO:"+msg);
}
}
public class DebugLogger extends Logger{
public DebugLogger(int level) {
this.level = level;
}
@Override
public void printMsg(String msg) {
System.out.println("DEBUG:"+msg);
}
}
public class ErrorLogger extends Logger{
public ErrorLogger(int level) {
super();
this.level = level;
}
@Override
public void printMsg(String msg) {
System.err.println("ERROR:"+msg);
}
}
生成一个工具类来生成职责链,将四个等级的log串联起来
public class LogUtil {
public static Logger getLogger() {
Logger verboseLogger = new VerboseLogger(Logger.VERBOSE);
Logger infoLogger = new InfoLogger(Logger.INFO);
Logger debugLogger = new DebugLogger(Logger.DEBUG);
Logger errorLogger = new ErrorLogger(Logger.ERROR);
errorLogger.setNextLogger(debugLogger);
debugLogger.setNextLogger(infoLogger);
infoLogger.setNextLogger(verboseLogger);
return errorLogger;
}
}
使用职责链输出我们的log
public static void main(String[] args) {
Logger logger = LogUtil.getLogger();
logger.logMessage(Logger.ERROR, "Error Information");
logger.logMessage(Logger.DEBUG, "Debug Information");
logger.logMessage(Logger.INFO, "Info Information");
logger.logMessage(Logger.VERBOSE, "Verbose Information");
}
结果如下:ERROR:Error Information
DEBUG:Debug Information
INFO:Info Information
VERBOSE:Verbose Information
第二种
ERROR:Error InformationDEBUG:Debug Information
INFO:Info Information
VERBOSE:Verbose Information
现在还不清楚为什么会出现这个,需要等我重拾java来看看了。
由此可以看出:职责链是一个请求者的请求中转站,通过这个接口,我们可以将所有的请求都通过它前去寻找处理方法,从而不必要每一次请求都要找到对应的接收者,让请求者和接收者没有直接的相互关系,减少耦合,但是如果链比较长,势必影响性能。