單例模式定義:一個類有且僅有一個實例,並且自行實例化向整個系統提供。
實現要點:
1、是單例模式的類只提供私有的構造函數。
2、是類定義中含有一個該類的靜態私有對象。
3、是該類提供了一個靜態的共有的函數用於創建或獲取它本身的靜態私有對象。
雙重鎖定實現代碼(多線程內):
namespace Singleton
{
public class Singleton
{
//定義一個私有的靜態全局變量來保存該類的唯一實例
private static Singleton _singleton;
//定義一個只讀靜態對象
//且這個對象是在程序運行時創建的
private static readonly object _lockObj = new object();
/// <summary>
/// 構造函數必須是私有的
/// 這樣在外部便無法使用 new 來創建該類的實例
/// </summary>
private Singleton() { }
/// <summary>
/// 定義一個全局訪問點
/// 設置為靜態方法
/// 則在類的外部便無需實例化就可以調用該方法
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
//這裡可以保證只實例化一次
//即在第一次調用時實例化
//以後調用便不會再實例化
//第一重 singleton == null
if (_singleton == null)
{
lock (_lockObj)
{
//第二重 singleton == null
if (_singleton == null)
{
_singleton = new Singleton();
}
}
}
return _singleton;
}
}
}