23種設計模式 單例模式

2021-08-20 07:22:21 字數 1442 閱讀 5274

某些情況,如:執行緒池,乙個專案中匯流排程數量以及生命週期,可能需要統一控制;如果執行緒池自身可建立多個例項,那麼就無法統一控制,此時,只要能控制線程池物件的數量為乙個,那麼就可以實現統一控制的目標;

注意:現實中真正使用純的單例模式並不多;

如: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 提供獲取該物件的公共方法 ...