【设计模式】责任链模式

参考:B站动力节点

责任链模式

定义:为请求创建了一个接收者对象的链。对请求的发送者和接收者进行解耦。该模式下,通常每个接收者包含另一个接收者的引用,如果一个对象不能处理该请求则会传给下一个,以此类推,形成链式结构

举例说明,日志类打印日志,若出现报错,则转由下一级报错类打印报错信息,以此类推。

public abstract class AbstractLogger{
	public static int INFO = 1;
	public static int DEBUG = 2;
	public static int ERROR = 3;

	protected int level;
	private 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);
		}
	}

	public abstract void write(String message);
}

先设计一个抽象类AbstractLogger,该类中提供了基础功能并可以定义下一级Logger。接下来定义各级别具体实现类:

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

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

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

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

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

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

在测试类中,先定义链式关系,然后输入不同级别系信息。

public class Test{
	public static AbstractLogger getChainOfLogger(){
		AbstractLogger infoLogger = new AbstractLogger(AbstractLogger.INFO);
		AbstractLogger debugLogger = new AbstractLogger(AbstractLogger.DEBUG);
		AbstractLogger errorLogger = new AbstractLogger(AbstractLogger.ERROR);
		infoLogger.setNextLogger(debugLogger);
		debugLogger.setNextLogger(errorLogger);
		return infoLogger;
	}

	public static void main(String[] args) {
		AbstractLogger logger = getChainOfLogger();

		logger.logMessage(AbstractLogger.INFO, " 这是一个INFO级别的日志记录");
		logger.logMessage(AbstractLogger.DEBUG, " 这是一个DEBUG级别的日志记录");
		logger.logMessage(AbstractLogger.ERROR, " 这是一个ERROR级别的日志记录");
	}
}

打印结果:

INFO LOGGER :::>>> 这是一个INFO级别的日志记录
INFO LOGGER :::>>> 这是一个DEBUG级别的日志记录
DEBUG LOGGER :::>>> 这是一个DEBUG级别的日志记录
INFO LOGGER :::>>> 这是一个ERROR级别的日志记录
DEBUG LOGGER :::>>> 这是一个ERROR级别的日志记录
ERRORLOGGER :::>>> 这是一个ERROR级别的日志记录

总结:当传入高级别日志记录时,会不断传入下一级别的Logger类中处理,和实际上的报错日志很相似,重点理解责任链模式的链式传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值