添加到Trav所说的......
除了 Log 的 Singleton 实现之外,您还可以将它包装在静态类周围。这样您就不需要更改已经使用静态 Log 类的位置。并且为您的单元测试交换模拟日志框架将非常容易。我将在 Java 中给出一个示例——假设您有如下所示的内容:
public class Log
{
public static void debug(Object o, String message)
{
System.out.println(o + " [DBUG] " + message);
}
public static void info(Object o, String message)
{
System.out.println(o + " [INFO] " + message);
}
}
您可以像下面这样重构它:
public interface ILoggeer
{
void debug(Object o, String message);
void info(Object o, String message);
}
public class Log
{
private static ILogger log = new ConsoleLogger();
public static setLogger(ILogger impl)
{
log = impl;
}
public static void debug(Object o, String message)
{
log.debug(o, message);
}
public static void info(Object o, String message)
{
log.info(o, message);
}
}
public class ConsoleLogger implements ILogger
{
public void debug(Object o, String message)
{
System.out.println(o + " [DBUG] " + message);
}
public void info(Object o, String message)
{
System.out.println(o + " [INFO] " + message);
}
}