Singleton 單例模式(建立型)

2021-07-04 11:00:38 字數 1416 閱讀 8303

單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干通訊埠,系統應當集中管理這些通訊埠,以避免乙個通訊埠同時被兩個請求同時呼叫。

單例類只能有乙個例項

單例類必須自己建立自己的唯一例項

單例類必須給所有其他物件提供這一例項

所謂餓漢式,就是在類載入時完成singleton例項的初始化,多執行緒安全。

在外部用例試圖使用 getinstance 方法獲取物件時,引起singleton類的載入,引起靜態成員變數 instance 的初始化。而且同乙個類載入只會加 singleton 一次。

public

class singleton

private

static final singleton instance = new singleton();;

public

static singleton getinstance()

}

所謂懶漢式,就是在外部用例發出請求時,才會被動建立例項。

1 double check lock— 多執行緒幾乎安全,在另一篇文章中介紹過 dcl 不一定是多執行緒安全的。

public

class singleton

private

static singleton instance;

public

static singleton getinstance() }}

return instance;

}

}

step1 :如果沒有 step1 處的判斷,那麼每個執行緒進入 getinstance 都要進行同步,這根直接將 getinstance 方法 設定為synchronized一樣效率低下。

step2 :多執行緒情況下,可能會有多餘乙個執行緒在 synchronized 塊前阻塞,若沒有step2,可能會產生多個不同的例項。

2 內部類實現— 多執行緒幾乎安全,內部類實現結合了餓漢式思想。

public

class singleton

private

static

class innersingleton

public

static final singleton getinstance()

}

訪問 innersingleton. instance 靜態屬性時同樣會引起內部類innersingleton 的載入,載入過程中完成了靜態變數 instance 的初始化。

單例模式(Singleton)的建立

餓漢模式 懶漢模式 序列化單例模式 乙個類重點內容中帶有乙個例項,該例項通過單例類提供給全域性使用。建乙個單例模式的類的通用步驟 建立乙個類 編寫乙個類例項 編寫無參構造器並用private修飾 編寫獲取例項的方法getinstance 餓漢模式 例項在類載入的時候就建立 class singlet...

Singleton單例模式(建立型模式)

為什麼要使用單例模式?在軟體系統中,有一種特殊的類,必須保證他們在系統中只存在乙個例項,才能確保它們的邏輯正確性 以及良好的效率 單例模式的特點?保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點 public class singleton public static singleton in...

(建立型模式)Singleton 單例模式

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點 確保某個類只有乙個例項 類的靜態成員變數 而且自行例項化並向整個系統提供這個例項單例模式。直接將類的構造方法改成私有的 所有類都有構造方法,不編碼則系統預設生成空的構造方法,若有顯示定義的構造方法,預設的構造方法就會失效 然後在乙個public...