方法一:
public class Singleton {
private static Singleton uniqueSingleton;
// 私有化构造方法
private Singleton() {}
// 获取单例
public static synchronized Singleton getSingleton() {
if(uniqueSingleton == null) {
uniqueSingleton = new Singleton();
}
return uniqueSingleton;
}
}
方法二:
public class Singleton {
private static Singleton uniqueSingleton = new Singleton();
// 私有化构造方法
private Singleton() {}
// 获取单例
public static synchronized Singleton getSingleton() {
return uniqueSingleton;
}
}
方法三:
class Singleton {
private volatile static Singleton uniqueSingleton;
// 私有化构造方法
private Singleton() {}
// 获取单例
public static Singleton getInstance() {
if (uniqueSingleton == null) {
synchronized(Singleton.class) {
if(uniqueSingleton == null) {
uniqueSingleton = new Singleton();
}
}
}
return uniqueSingleton;
}
}
适用场合:
方法一:只有在getInstance不是频繁使用(对程序性能影响很小)的时候才能使用
方法二:当不希望使用单例的时候还可能没有被初始化,这时候采用;方案二又被称作饿汉单例
方法三:当频繁需要使用单例对象时,采用方案三;性能最好