單例模式應(yīng)該是應(yīng)用最廣的模式,也是最容易理解的模式了.
在許多時候,我們整個系統(tǒng)值需要擁有一個全局對象,這樣有利我們的管理和使用.比如網(wǎng)絡(luò)的訪問請求,線程池等.
而寫法多種多樣,最最簡單的寫法
public class Singleton {
//私有化構(gòu)造方法
private Singleton() {}
private static Singleton single=null;
//靜態(tài)工廠方法
public static Singleton getInstance() {
if (single == null) {
single = new Singleton();
}
return single;
}
}
但是這樣寫顯然不是線程安全的
關(guān)于線程安全的寫法很多
這里我舉例使用靜態(tài)內(nèi)部類的單例模式
public class Singleton {
private Singleton() {}
?private static class Holder {
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return Holder.instance;
}
}
第一次加載Singleton類不會初始化instance,只有在調(diào)用getInstance()的時候才會導(dǎo)致instance被初始化.而且通過靜態(tài)內(nèi)部類可以保證單例且線程安全