設計模式之單例模式

2021-10-06 16:44:49 字數 1893 閱讀 2286

單例模式的定義與特點

單例(singleton)模式的定義:

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

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

單例(singleton)模式的特點:

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

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

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

常見的五種單例模式實現方式:

餓漢式:執行緒安全,呼叫效率高,但是不能延時載入

懶漢式:執行緒安全,呼叫效率不高,但是可延時載入

雙重檢測鎖式:由於jvm 底層內部模型原因,偶爾出現問題。不建議使用

靜態內部類式:執行緒安全,呼叫效率高,但是可以延時載入

列舉單例:執行緒安全,呼叫效率高,不能載入延時

餓漢式:

/**

* 餓漢式單例模式

* @author

* */

public

class

singletontest01

//類初始化時,立即載入這個物件

private

static singletontest01 instance =

newsingletontest01()

;public

static singletontest01 getinstance()

懶漢式:

/**

* 懶載入 延時載入

* @author l

* */

public

class

singletontest02

//同步方法,呼叫效率降低

public

static

synchronized singletontest02 getinsntance()

return instance;

}

雙重鎖式:

/**

* 雙重鎖 通過volatile關鍵字來保證初始化時物件的唯一性

* @author

* */

public

class

double_checked_locking

public

static double_checked_locking getsingleton()

dcl = dcl2;}}

return dcl;

}

靜態內部類式

兼備了併發高效呼叫和延時載入的優勢

/**

* 靜態內部類實現,也是一種懶載入

* @author

* */

public

class

singletontest03

//靜態內部類

private

static

class

singletonclassinstance

public

static singletontest03 getinstance()

列舉單例

無延時載入

/**

* @author

*/public

enum enumsingle

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...