注:學習內容來自劉偉老師的技術部落格《史上最全的設計模式》。這個系列的部落格深入淺出,引人入勝,值得學習。
1. 什麼是單例模式?
單例模式(singleton pattern):確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,它提供全域性訪問的方法。單例模式是一種物件建立型模式。
2. 如何實現只能建立乙個物件?
3. 如何獲得類內部的唯一例項化物件?
由於不能在外部例項化物件,所以不能通過物件的例項來呼叫類的方法,而只能通過類名來呼叫類的靜態方法。又由於靜態方法中只能使用靜態的成員變數,因此我們在類中定義乙個靜態的引用指向該例項物件。如下為餓漢模式:
classsingleton
//獲取單例物件
public
static singleton getinstance()
return
instance;
}}
懶漢模式:
classsingleton
//獲取單例物件
public
static singleton getinstance()
}
4. 單例模式的不同實現方式?
餓漢式單例類在類被載入時就將自己例項化,它的優點在於無須考慮多執行緒訪問問題,可以確保例項的唯一性;從呼叫速度和反應時間角度來講,由於單例物件一開始就得以建立,因此要優於懶漢式單例。但是無論系統在執行時是否需要使用該單例物件,由於在類載入時該物件就需要建立,因此從資源利用效率角度來講,餓漢式單例不及懶漢式單例,而且在系統載入時由於需要建立餓漢式單例物件,載入時間可能會比較長。
懶漢式單例類在第一次使用時建立,無須一直占用系統資源,實現了延遲載入,但是必須處理好多個執行緒同時訪問的問題,特別是當單例類作為資源控制器,在例項化時必然涉及資源初始化,而資源初始化很有可能耗費大量時間,這意味著出現多執行緒同時首次引用此類的機率變得較大,需要通過雙重檢查鎖定等機制進行控制,這將導致系統效能受到一定影響。
5. 懶漢模式的執行緒鎖定方式
6. 一種更好的單例實現方式
單例模式學習
通常情況下我們可以讓乙個全域性變數使得乙個物件被訪問,但不能防止你例項化多個物件,乙個最好的方法就是,讓類自身負責儲存他的唯一例項。這個類可以保證沒有其他例項可以被建立,並且他可以提供乙個訪問該例項的方法。一 經典單例 public class singleton public static sin...
學習單例模式
1 單例模式是怎樣產生的?當想要讓乙個定義類只能例項化乙個物件,則不能對外提供public的構造方法,而是要把構造方法定義為private的,這樣就可以讓定義類自己控制類的例項化。同時,也要對外提供乙個public的方法,用來得到定義類的例項。當然,在定義類的內部需要初始化來建立自身的乙個例項 保證...
單例模式學習
單例模式實現 一.實現雙重校驗鎖 public class singleton public static singleton getsingleton return singleton 特點 通過關鍵字synchronized保證高併發下,初始化物件為單例。缺點效能較差,物件屬性需要volatil...