首页 > 编程笔记 > Java笔记

工厂方法模式在Logback源码中的应用

Logback 在创建 Log 时,使用的就是工厂方法。它的各个元素都是在 sun.rmi.runtime 包中的 Log.java 类用内部类实现的,但这并不影响工厂方法的结构。

在 Log 类中,抽象产品基类就是 Log,其中一个产品实现类为 LoggerLog,抽象工厂类为 LogFactory,工厂实现类为 LoggerLogFactory。另一个是 LogStreamLog 和 LogStreamLogFactory。其中关键代码如下,为了让小伙伴们更加容易读懂,这里我们调整了一下源码顺序。
public abstract class Log {
 
    ... ...
    public abstract void log(Level var1, String var2);
   
    private interface LogFactory {
        Log createLog(String var1, String var2, Level var3);
    }
   
    private static class LoggerLog extends Log {
        public void log(Level var1, String var2) {
            if (this.isLoggable(var1)) {
                String[] var3 = Log.getSource();
                this.logger.logp(var1, var3[0], var3[1], Thread.currentThread().getName() + ": " + var2);
            }
        }
    }

    private static class LoggerLogFactory implements Log.LogFactory {
        public Log createLog(String var1, String var2, Level var3) {
            Logger var4 = Logger.getLogger(var1);
            return new Log.LoggerLog(var4, var3);
        }
    }
   
    private static class LogStreamLog extends Log {
        public void log(Level var1, String var2) {
            if (this.isLoggable(var1)) {
                String[] var3 = Log.getSource();
                this.stream.println(unqualifiedName(var3[0]) + "." + var3[1] + ": " + var2);
            }
        }
    }

    private static class LogStreamLogFactory implements Log.LogFactory {
        public Log createLog(String var1, String var2, Level var3) {
            LogStream var4 = null;
            if (var2 != null) {
                var4 = LogStream.log(var2);
            }
            return new Log.LogStreamLog(var4, var3);
        }
    }
}

所有教程

优秀文章