某些情況,如:執行緒池,乙個專案中匯流排程數量以及生命週期,可能需要統一控制;如果執行緒池自身可建立多個例項,那麼就無法統一控制,此時,只要能控制線程池物件的數量為乙個,那麼就可以實現統一控制的目標;
注意:現實中真正使用純的單例模式並不多;
如:spring bean ,通過配置來決定是否使用單例;執行緒池、連線池也並未使用單例(如果完全使用單例,就沒辦法根據業務配置多個執行緒池和多資料來源連線池)
整個專案或系統的生命週期內,只建立乙個物件;
本質:
更像是乙個能建立類自身例項的工具類;
只能建立乙個物件的場景
概念相關:
所謂懶,就是在需要時才建立,不需要就不建立;所謂的需要就是呼叫;
優點:第一次呼叫時產生物件,不需要提前建立乙個可能永不使用的物件;
缺點:建立時存在鎖競爭;使用時需要null檢查;
public
class singlemodel
public
static singlemodel getinstance()}}
return instance;
}}
概念相關
所謂餓,就是在需要物件之前就已經建立,需要時直接返回已經建立的物件即可;
優點:使用時,不需要每次都進行null檢查,和鎖競爭;減小效能消耗;
缺點:提前建立物件,可能物件永遠不會使用;
public
class singlemodel
//類載入時建立:通過類載入的執行緒安全特性建立例項
private
static final singlemodel instance = new singlemodel();
//直接返回例項
public
static singlemodel getinstance()
}
優點:
整合了懶漢和餓漢的所有優點;物件延遲建立;執行緒安全,無需要檢查和加鎖;
原理:a:類在第一次使用時才會載入(import並不會載入)
b:類載入本身是執行緒安全的
c:內部類可以呼叫外部類的私有構造器
d:通過內部類的延遲載入,實現例項的延遲建立;通過內部類載入的執行緒安全性,建立靜態屬性引用外部物件;
public
class singlemodel
//內部類:靜態屬性-引用外部物件
private
static
class singleinstancemodel
//第一呼叫時,才開始載入內部類,又通過內部類(類載入的執行緒安全性)的載入,生成外部物件;
public
static singlemodel getinstance()
主要開源專案中,真正使用純的單例模式的例子並不多。 單例模式(23種設計模式)
單例模式 餓漢模式 class singletondemo public static singletondemo gets 懶漢模式 class singletondemo1 public static singletondemo1 gets return instance 單例模式,懶漢式,執行...
23種設計模式 單例模式
單例模式需要保證,構造方法一定是私有化的,並且類的全域性變數必須是靜態的,私有的 這樣才能有唯一的例項化途徑 錯誤 一 public class singleton public static singleton getinstance 上述方法,並沒有把類變數singleton設定為靜態的,這樣,...
23種設計模式 單例模式
單例模式 保證乙個類只有乙個例項,並且提供乙個該例項的全域性訪問點 單例模式的要素 public class singleton1 2 類初始化的時候,立即載入該物件 private static singleton1 singleton1 newsingleton1 3 提供獲取該物件的公共方法 ...