設計模式學習筆記(單例模式篇)

2021-08-29 00:19:00 字數 1377 閱讀 3757

確保乙個類只有乙個例項,並提供乙個全域性訪問點。

public

class

singleton

return instance;

}}

私有化了建構函式,並對外提供獲取例項物件的共有方法。所謂懶漢式,就是用到的時候才會真正的去建立物件。

優點:可以實現延時載入

缺點:在多執行緒併發訪問的情況下,會有執行緒安全問題。

那麼如何解決執行緒安全問題?我們首先想到的就是加鎖,在getinstance方法上加上synchronized關鍵字。

public

class

singleton

return instance;

}}

加鎖能解決執行緒安全問題,但是會導致效能下降很多。並且只有在第一次訪問的時候才會真正用到鎖。

我們剛解決了乙個問題,卻又必須面對效能下降的巨大壓力。那麼該怎麼辦呢?解決的辦法就是使用雙重檢查加鎖

public

class

singleton}}

return instance;

}

效能上會有很大的提公升,執行緒安全的問題解決了。那麼還有其他的方案嗎?答案肯定是有的,那就是使用靜態內部類

package com.liwen.singleton;

public

class

singleton3

public

static singleton getinstance()

//靜態內部類

private

static

class

usersingleton

}

因為這個類的例項化是靠靜態內部類的靜態常量例項化的。instance 是常量,因此只能賦值一次;它還是靜態的,因此隨著內部類一起載入。採用靜態內部類實現的**也是懶載入的,只有第一次使用這個單例的例項的時候才載入, 同時不會有執行緒安全問題。

public

class

singleton

}

所謂的餓漢式,就是類載入的時候就會生成例項物件。

1、單例,也即是只有乙個物件,尤其是對於一些很笨重的物件,本身不會變化,建立和銷毀卻又很消耗系統資源。那麼我們很常見的做法就是在系統啟動的時候就把這些物件建立好,並且做成單例供系統呼叫。

2、單例提供了乙個全域性訪問點,和全域性變數一樣方便,卻沒有全域性變數的缺點。

3、可以實現延遲例項化。

讀取配置檔案、載入工廠(jdbc)、執行緒池、日誌等等。

設計模式學習筆記 單例模式

定義 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例模式的通用類圖如下 如下 public class singleton public static singleton getinstance public void dosomething 這裡需要注意幾個地方 1 要定義...

設計模式學習筆記(單例模式)

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式是對全域性變數的一種改進。全域性變數空間利用率比較低,且在專案中是乙個不安全隱患,特別是在多執行緒程式中,會有很多的不可 性 同時,使用全域性變數,也不符合物件導向的封裝原則。1 基礎版本 include using namespace...

設計模式 單例模式(學習筆記)

經典單例模式原理 1 單例模式 確保乙個類最多只有乙個例項,並提供乙個全域性訪問點 2 單例模式的意義 有些物件我們只需要乙個 執行緒池,快取,硬體設別等。如果多個例項會造成衝突 結果的不一致性等問題。使用靜態不變數方式來實現,或者使用全域性變數。3 單例模式類圖 經典單例模式存在的問題 改進方案 ...