作者:mobiledu2502924733 | 来源:互联网 | 2024-10-10 19:42
目录定义特点源码实例1.获取ErrorContext实例2.获取org.slf4j.Logger实例对象定义单例模式(SingletonPattern):单例模式确
目录
- 定义
- 特点
- 源码实例
- 1. 获取ErrorContext实例
- 2.获取org.slf4j.Logger 实例对象
定义
单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
特点
1、一是某个类只能有一个实例;
2、二是它必须自行创建这个实例;
3、三是它必须自行向整个系统提供这个实例。
4、单例模式是一种对象创建型模式。
5、单例模式又名单件模式或单态模式。
源码实例
在Mybatis中有两个地方用到单例模式,ErrorContext和LogFactory,其中ErrorContext是用在每个线程范围内的单例,用于记录该线程的执行环境错误信息,而LogFactory则是提供给整个Mybatis使用的日志工厂,用于获得针对项目配置好的日志对象。
1. 获取ErrorContext实例
ErrorContext是用在每个线程范围内的单例,用于记录该线程的执行环境错误信息。
代码片段
public class ErrorContext {private static final ThreadLocal<ErrorContext> LOCAL &#61; new ThreadLocal<>();private ErrorContext() {}public static ErrorContext instance() {ErrorContext context &#61; LOCAL.get();if (context &#61;&#61; null) {context &#61; new ErrorContext();LOCAL.set(context);}return context;}
}
2.获取org.slf4j.Logger 实例对象
LogFactory没有实现获取自身的方式,只是当成一个提供日志打印的工具。
代码片段
public final class LogFactory {private LogFactory() {}public static Log getLog(Class<?> aClass) {return getLog(aClass.getName());}public static Log getLog(String logger) {try {return logConstructor.newInstance(new Object[] { logger });} catch (Throwable t) {throw new LogException("Error creating logger for logger " &#43; logger &#43; ". Cause: " &#43; t, t);}}
}