工厂方法模式在Logback源码中的应用
Logback 在创建 Log 时,使用的就是工厂方法。它的各个元素都是在 sun.rmi.runtime 包中的 Log.java 类用内部类实现的,但这并不影响工厂方法的结构。
在 Log 类中,抽象产品基类就是 Log,其中一个产品实现类为 LoggerLog,抽象工厂类为 LogFactory,工厂实现类为 LoggerLogFactory。另一个是 LogStreamLog 和 LogStreamLogFactory。其中关键代码如下,为了让小伙伴们更加容易读懂,这里我们调整了一下源码顺序。
在 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); } } }
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算