责任链模式(Chain of Responsiblity Pattern) 为这种请求创建了一个接受者的链。这种模式给予请求的类型
这种模式给予请求的类型 对请求的发送者和接受者进行解偶。 这种类型的设计模式属于行为模式。
在这种模式中,通常每个接受者都包含对另一个接受者的引用 如果一个对象不能处理该请求 那么它会把相同的请求传递给下一个请求。
意图:避免请求发送者与接受者耦合在一起,让多个对象有可能接受请求将这些连成一条链,并且沿着这条链传递请求,直到有对象处理为值。
下面是demo.
package com.royan.weakey.platform.pattern.chainResponsibility;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
/**
* 责任链模式(Chain of Responsibility Pattern)
* 为请求创建了一个接受者对象的链。这种模式给予请求的类型
* 这种模式给予请求的类型 对请求的发送者和接受者进行解偶。
* 这种类型的设计模式属于行为模式
* <p>
* 在这种模式中,通常每个接受者都包含对另一个接受者的引用
* 如果一个对象不能处理该请求 那么它会把相同的请求下一个接收者
* <p>
* 意图:避免请求发送者与接受者耦合在一起,让多个对象有可能接受请求
* 将这些连成一条链,并且沿着这条链传递请求 直到有对象处理它为止。
*/
@Slf4j
@Data
public abstract class
AbstractLogger {
enum LogLevel {
INFO(1),
DEBUG(2),
ERROR(3);
private int code;
LogLevel(int code) {
this.code = code;
}
private int getCode() {
return code;
}
}
public AbstractLogger(LogLevel logLevel) {
this.logLevel = logLevel;
}
private LogLevel logLevel;
protected AbstractLogger nextLogger;
public void logMessage(LogLevel level, String message) {
if (this.logLevel.getCode() <= level.getCode())
write(message);
if (nextLogger != null)
nextLogger.logMessage(level, message);
}
abstract protected void write(String message);
}
package com.royan.weakey.platform.pattern.chainResponsibility;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ErrorLogger extends AbstractLogger {
public ErrorLogger(LogLevel logLevel) {
super(logLevel);
}
@Override
protected void write(String message) {
log.info("Error Console::Logger-{}", message);
}
}
package com.royan.weakey.platform.pattern.chainResponsibility;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class FileLogger extends AbstractLogger {
public FileLogger(LogLevel logLevel) {
super(logLevel);
}
@Override
protected void write(String message) {
log.info("File::Logger-{}", message);
}
}
package com.royan.weakey.platform.pattern.chainResponsibility;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ConsoleLogger extends AbstractLogger {
public ConsoleLogger(LogLevel logLevel) {
super(logLevel);
}
@Override
protected void write(String message) {
log.info("Standard Console::Logger-{}", message);
}
}
package com.royan.weakey.platform.pattern.chainResponsibility;
public class ChainPatternDemo {
private static AbstractLogger getChainOfLoggers() {
AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.LogLevel.ERROR);
AbstractLogger fileLogger = new FileLogger(AbstractLogger.LogLevel.DEBUG);
AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.LogLevel.INFO);
errorLogger.setNextLogger(fileLogger);
fileLogger.setNextLogger(consoleLogger);
return errorLogger;
}
public static void main(String[] args) {
AbstractLogger loggerChain = getChainOfLoggers();
loggerChain.logMessage(AbstractLogger.LogLevel.INFO, "This is an info information");
loggerChain.logMessage(AbstractLogger.LogLevel.DEBUG, "This is a debug level information.");
loggerChain.logMessage(AbstractLogger.LogLevel.ERROR, "This is an error information.");
}
}
来源:https://www.cnblogs.com/caibixiang123/p/10545844.html