23種設計模式 單例模式

2021-10-09 01:40:58 字數 1529 閱讀 1456

link

在有些系統中,為了節省記憶體資源、保證資料內容的一致性,對某些類要求只能建立乙個例項,這就是所謂的單例模式。

單例(singleton)模式的定義:指乙個類只有乙個例項,且該類能自行建立這個例項的一種模式。例如,windows 中只能開啟乙個任務管理器,這樣可以避免因開啟多個任務管理器視窗而造成記憶體資源的浪費,或出現各個視窗顯示內容的不一致等錯誤。

在計算機系統中,還有 windows 的**站、作業系統中的檔案系統、多執行緒中的執行緒池、顯示卡的驅動程式物件、印表機的後台處理服務、應用程式的日誌物件、資料庫的連線池、**的計數器、web 應用的配置物件、應用程式中的對話方塊、系統中的快取等常常被設計成單例。

單例模式有 3 個特點:

單例類只有乙個例項物件;

該單例物件必須由單例類自行建立;

單例類對外提供乙個訪問該單例的全域性訪問點;

單例模式是設計模式中最簡單的模式之一。通常,普通類的建構函式是公有的,外部類可以通過「new 建構函式()」來生成多個例項。但是,如果將類的建構函式設為私有的,外部類就無法呼叫該建構函式,也就無法生成多個例項。這時該類自身必須定義乙個靜態私有例項,並向外提供乙個靜態的公有函式用於建立或獲取該靜態私有例項。

單例模式是設計模式中最簡單的模式之一。通常,普通類的建構函式是公有的,外部類可以通過「new 建構函式()」來生成多個例項。但是,如果將類的建構函式設為私有的,外部類就無法呼叫該建構函式,也就無法生成多個例項。這時該類自身必須定義乙個靜態私有例項,並向外提供乙個靜態的公有函式用於建立或獲取該靜態私有例項。

單例類:包含乙個例項且能自行建立這個例項的類

訪問類:使用單例的類

懶漢方式,等你要用我再建立。第一次有訪問類呼叫get方法時,判斷當前例項為空,那麼就建立乙個新的

/**

* 懶漢

* 該模式的特點是類載入時沒有生成單例,只有當第一次呼叫 getlnstance 方法時才去建立這個單例。

*/public

class

lazysingleton

/** * get方法

* 第三步:提供乙個對外的get方法,在例項為null時new 乙個物件

** @return

*/public

static

synchronized lazysingleton getlazysingleton()

}

/**

* 餓漢

*/public

class

hungrysingleton

/** * get方法

* 第三步:提供乙個對外get方法,直接返回,不進行例項的建立

** @return

*/public

static

synchronized hungrysingleton gethungrysingleton()

}

23種設計模式 單例模式

某些情況,如 執行緒池,乙個專案中匯流排程數量以及生命週期,可能需要統一控制 如果執行緒池自身可建立多個例項,那麼就無法統一控制,此時,只要能控制線程池物件的數量為乙個,那麼就可以實現統一控制的目標 注意 現實中真正使用純的單例模式並不多 如 spring bean 通過配置來決定是否使用單例 執行...

單例模式(23種設計模式)

單例模式 餓漢模式 class singletondemo public static singletondemo gets 懶漢模式 class singletondemo1 public static singletondemo1 gets return instance 單例模式,懶漢式,執行...

23種設計模式 單例模式

單例模式需要保證,構造方法一定是私有化的,並且類的全域性變數必須是靜態的,私有的 這樣才能有唯一的例項化途徑 錯誤 一 public class singleton public static singleton getinstance 上述方法,並沒有把類變數singleton設定為靜態的,這樣,...