文檔查閱說明:
定義:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點
使用場景:
● 要求生成唯一序列號的環境;
● 在整個項目中需要一個共享訪問點或共享數據,例如一個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("相同的實例類");
}
}
}