單例模式的五種寫法

2021-10-14 12:58:21 字數 2185 閱讀 3378

常規寫法(懶漢式),用在單執行緒,會有多執行緒問題

//常規寫法

public

sealed

class

singleton1

private

static

singleton1 m_instance;

public

static

singleton1 instance

return m_instance;}}

public

void

excute()

}

加同步鎖法,考慮多執行緒安全問題,不過該寫法每次都加鎖是比較耗時的操作,所以有了第三種寫法

//加同部鎖

public

sealed

class

singleton2

private

static

object syncobj =

newobject()

;private

static

singleton2 m_instance;

public

static

singleton2 instance

}return m_instance;}}

public

void

excute()

}

加同步鎖+前後判斷,在加鎖之前之後都判斷一次例項是否已建立,如果已建立則直接得到該例項,不去加鎖,不過該寫法寫起來比較複雜

public

sealed

class

singleton3

private

static

object syncobj =

newobject()

;private

static

singleton3 m_instance;

public

static

singleton3 instance

}}return m_instance;}}

public

void

excute()

}

利用靜態建構函式法(餓漢式),利用靜態建構函式只會執行一次的特性。有兩種寫法,不過區別不大

//利用靜態建構函式

//第一種(更簡便點)

public

sealed

class

singleton4

private

static

singleton4 m_instance =

newsingleton4()

;public

static

singleton4 instance

}public

void

excute()

}//第二種

public

sealed

class

singleton4

private

static

singleton4 m_instance =

null

;//靜態建構函式

static

singleton4()

public

static

singleton4 instance

}public

void

excute()

}

利用巢狀內部類,初始化工作由內部類的乙個靜態成員來完成,這樣就實現了延遲初始化,也是懶漢式寫法

//利用巢狀內部類

public

sealed

class

singleton5

public

static

singleton5 instance

}public

void

excute()

class

temp

internal

static

readonly

singleton5 m_singleton2 =

newsingleton5()

;}}

總結:推薦第4、5種寫法

模式 單例模式8種寫法

單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系...

單例模式的7種寫法

在介紹單例模式的寫法之前,我們有必要了解一下什麼是單例模式。單例模式是一種常用的軟體設計模式,在他的核心結構中只包含乙個被稱為 單例的特殊類。通過單例模式可以保證系統只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的...

單例模式的八種寫法

單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系...