MST

星途 面试题库

面试题:Java中如何在日志记录系统里运用装饰器模式实现日志级别控制

假设你正在开发一个日志记录系统,要求通过Java装饰器模式实现对不同日志级别的控制(如DEBUG、INFO、ERROR),请描述具体的实现思路,并给出关键代码示例。
22.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义日志记录接口:创建一个日志记录的接口,包含记录日志的方法。
  2. 实现具体日志记录类:实现上述接口,提供具体的日志记录功能。
  3. 定义装饰器抽象类:该类同样实现日志记录接口,并持有一个日志记录接口的实例,用于委托调用。
  4. 创建具体装饰器类:继承装饰器抽象类,根据不同日志级别,在委托调用前后添加相应的处理逻辑。

关键代码示例

  1. 日志记录接口
public interface Logger {
    void log(String message);
}
  1. 具体日志记录类
public class ConsoleLogger implements Logger {
    @Override
    public void log(String message) {
        System.out.println(message);
    }
}
  1. 装饰器抽象类
public abstract class LoggerDecorator implements Logger {
    protected Logger logger;

    public LoggerDecorator(Logger logger) {
        this.logger = logger;
    }

    @Override
    public void log(String message) {
        logger.log(message);
    }
}
  1. 具体装饰器类(以DEBUG级别为例)
public class DebugLoggerDecorator extends LoggerDecorator {
    public DebugLoggerDecorator(Logger logger) {
        super(logger);
    }

    @Override
    public void log(String message) {
        System.out.println("[DEBUG]");
        super.log(message);
    }
}
  1. 使用示例
public class Main {
    public static void main(String[] args) {
        Logger logger = new ConsoleLogger();
        Logger debugLogger = new DebugLoggerDecorator(logger);
        debugLogger.log("This is a debug message.");
    }
}