天天看點

設計模式之禅學習筆記——單例模式單例模式

單例模式

一、定義

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

二、類圖

設計模式之禅學習筆記——單例模式單例模式

三、通用模闆代碼

public class Singleton{
	private static final Singleton singleton = new Singleton();
	private Singleton(){
	}
	public static Singleton getSingleton(){
		return singleton;
	}
	public static void doSomething(){
	}
}
           

四、單例模式的應用

優點

  1. 減少記憶體開銷,優化和共享資源的通路

缺點

  1. 沒有接口,拓展困難
  2. 測試不利,無法使用mock

使用場景

  1. 要求生成唯一序列号的環境
  2. 整個項目中需要一個共享通路點或共享資料
  3. 建立一個對象需要消耗的資源過多
  4. 需要定義大量的靜态常量和靜态方法(如工具類)的環境

懶漢與餓漢

懶漢:在初始化類的時候,不建立唯一的執行個體,而是等到真正需要用到的時候才建立。必須加上同步,否則有可能依然建立多個執行個體。

餓漢:在初始化的時候,就建立了唯一的執行個體,不管是否需要用到。不需要自己加同步,一定産生唯一的執行個體。通用模闆便是如此。

餓漢式是線程安全的,在類建立的同時就已經建立好一個靜态的對象供系統使用,以後不在改變。懶漢式當并發量較大時可能在記憶體中出現多個執行個體,破壞了最初的預期,這種情況可以使用synchronized關鍵字。

在使用單例模式時更推薦餓漢模式。