常規寫法(懶漢式),用在單執行緒,會有多執行緒問題
//常規寫法
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種寫法
在介紹單例模式的寫法之前,我們有必要了解一下什麼是單例模式。單例模式是一種常用的軟體設計模式,在他的核心結構中只包含乙個被稱為 單例的特殊類。通過單例模式可以保證系統只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的...
單例模式的八種寫法
單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系...