文档查阅说明:
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点
使用场景:
● 要求生成唯一序列号的环境;
● 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的;
● 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源;
● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然,也可以直接声明为static的方式)
通用代码:(线程安全的):
public class Singleton {
private static final Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getSingleton(){
return singleton;
}
}
线程不安全:
public class Singleton {
private static Singleton singleton;
private Singleton() {}
public static Singleton getSingleton() {
if(singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
public class Test {
public static void main(String[] args) {
Singleton singletonA = Singleton.getSingleton();
Singleton singletonB = Singleton.getSingleton();
if(singletonA == singletonB) {
System.out.println("相同的实例类");
}
}
}