职责链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。
责任链模式涉及到的角色如下所示:
在这里我们就代码实现下日志处理中的职责链模式:
假设一个事件需要进行日志处理,一共有Info、Warning、Error三个等级,每个等级都有相应的日志记录功能,记录日志时需要从低到高进行记录,首先要进行Info级别的记录,如果需要Error级别的日志则无法处理,所以需要高级别的日志记录器进行记录。
BaseLogger.java
/**
* @desc: 抽象职责处理类
* @author: YanMingXin
* @create: 2021/8/14-22:11
**/
public abstract class BaseLogger {
private BaseLogger logger;
protected final String INFO_LEVEL = "info";
protected final String WARNING_LEVEL = "warning";
protected final String ERROR_LEVEL = "error";
public BaseLogger getLogger() {
return logger;
}
public void setLogger(BaseLogger logger) {
this.logger = logger;
}
/**
* 输出信息
*
* @param logLevel
*/
public abstract void loggerMessage(String logLevel);
}
ErrorLogger.java
/**
* @desc: Error具体处理类
* @author: YanMingXin
* @create: 2021/8/14-22:12
**/
public class ErrorLogger extends BaseLogger {
@Override
public void loggerMessage(String logLevel) {
if (ERROR_LEVEL.equals(logLevel)) {
System.out.println("error level log ......");
} else {
getLogger().loggerMessage(logLevel);
}
}
}
InfoLogger.java
/**
* @desc: Info具体处理类
* @author: YanMingXin
* @create: 2021/8/14-22:11
**/
public class InfoLogger extends BaseLogger {
@Override
public void loggerMessage(String logLevel) {
if (INFO_LEVEL.equals(logLevel)) {
System.out.println("info level log ......");
} else {
getLogger().loggerMessage(logLevel);
}
}
}
WarningLogger.java
/**
* @desc: Warning具体处理类
* @author: YanMingXin
* @create: 2021/8/14-22:12
**/
public class WarningLogger extends BaseLogger{
@Override
public void loggerMessage(String logLevel) {
if (WARNING_LEVEL.equals(logLevel)) {
System.out.println("warning level log ......");
} else {
getLogger().loggerMessage(logLevel);
}
}
}
CorModelTest.java
/**
* @desc: 职责链模式(责任链模式)测试类
* @author: YanMingXin
* @create: 2021/8/14-21:58
**/
public class CorModelTest {
public static void main(String[] args) {
InfoLogger infoLogger = new InfoLogger();
WarningLogger warningLogger = new WarningLogger();
ErrorLogger errorLogger = new ErrorLogger();
//生成职责链
infoLogger.setLogger(warningLogger);
warningLogger.setLogger(errorLogger);
infoLogger.loggerMessage("error");
infoLogger.loggerMessage("info");
infoLogger.loggerMessage("warning");
}
}
测试结果:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。