方式一:
使用時才進行初始化,包括私有的構(gòu)造方法,私有的全局靜態(tài)變量,公有的靜態(tài)方法。
public class Singleton {
private static Singleton instance;//私有靜態(tài)變量
//私有構(gòu)造方法
private Singleton() {
System.out.println("初始化");
}
//公有靜態(tài)方法,暴露使用
public static Singleton getInstance() {
if(instance ==null) {
instance =new Singleton();
}
return instance;
}
}
方式二:
執(zhí)行效率相對較高,在類加載時初始化,會浪費內(nèi)存。
public class Singleton{
private static final Singleton instance =new Singleton();
private Singleton() {
System.out.println("初始化");
}
public static Singleton getInstance(){
return instance;
}
}
方式三:
靜態(tài)內(nèi)部類實現(xiàn),當Singleton 類被加載時,instance 還未被初始化。調(diào)用 getInstance 方法時,會顯示加載 SingletonHolder 類,從而實例化 instance。
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE =new Singleton();
}
private Singleton() {
System.out.println("初始化");
}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}