單例模式
一、定義
單例模式(Singleton Pattern):確定某一個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體。
二、類圖

三、通用模闆代碼
public class Singleton{
private static final Singleton singleton = new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton;
}
public static void doSomething(){
}
}
四、單例模式的應用
優點
- 減少記憶體開銷,優化和共享資源的通路
缺點
- 沒有接口,拓展困難
- 測試不利,無法使用mock
使用場景
- 要求生成唯一序列号的環境
- 整個項目中需要一個共享通路點或共享資料
- 建立一個對象需要消耗的資源過多
- 需要定義大量的靜态常量和靜态方法(如工具類)的環境
懶漢與餓漢
懶漢:在初始化類的時候,不建立唯一的執行個體,而是等到真正需要用到的時候才建立。必須加上同步,否則有可能依然建立多個執行個體。
餓漢:在初始化的時候,就建立了唯一的執行個體,不管是否需要用到。不需要自己加同步,一定産生唯一的執行個體。通用模闆便是如此。
餓漢式是線程安全的,在類建立的同時就已經建立好一個靜态的對象供系統使用,以後不在改變。懶漢式當并發量較大時可能在記憶體中出現多個執行個體,破壞了最初的預期,這種情況可以使用synchronized關鍵字。
在使用單例模式時更推薦餓漢模式。