1. 程式人生 > >面向對象設計模式 總結歸納 02【單例模式】

面向對象設計模式 總結歸納 02【單例模式】

ola 傳遞 單件 面向對象設計 線程 turn span ont rap

單例模式【單件模式】【Singleton Pattern】

保證一個類僅有一個實例,並提供一個該實例的全局訪問點。

示例1:

C# Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Singleton
{
public static readonly Singleton Instance;

/// <summary>
/// 靜態構造器,能保證多線程安全。多線程狀態下,只有一個線程能訪問靜態構造器。
/// 靜態構造器,只能實現一個無參數的靜態構造函數。
/// 可有使用屬性,進行實例化的參數傳遞。或者使用方法實現。
/// </summary>
static Singleton()
{
Instance =
new Singleton();
}

private Singleton() { }
}

示例2:【示例1的簡化寫法】

C# Code
1
2
3
4
5
6
class Singleton
{
public static readonly Singleton Instance = new Singleton();//能夠自動生成靜態構造函數。

private Singleton() { }
}

示例3:【帶參數】

C# Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/// <summary>
/// 多線程單例模式,帶參數
/// </summary>
public class Singleton
{
private static volatile Singleton instance = null;//防止編譯器微調。

private static object lockHelper =
new object();//輔助器


private Singleton(int i) { }

public static Singleton GetInstance(int i)
{
if (instance == null)
{
lock (lockHelper)//加鎖
{
if (instance == null)//雙檢查
{
instance =
new Singleton(i);
}
}
}
return instance;
}
}

面向對象設計模式 總結歸納 02【單例模式】