1.單例模式:保證一個類只要一個實體,并提供一個訪問它的全域訪問點,
2.談到單例模式,可能有人聽過‘餓漢式單例類’ 和 ‘飽漢式單例類’,
- 餓漢式單例類, 類在被加載時就實體化了,
- 飽漢式單例類, 類在第一次被參考時被實體化,
3.多執行緒下保證單例,雙重鎖定,代碼如下:
namespace SingletonPattern
{
/// <summary>
/// 飽漢模式
/// </summary>
public class Singleton_Full
{
private Singleton_Full() { }
private static Singleton_Full Instance = null;
public static readonly object syncObject = new object();
public static Singleton_Full GetSingletonInstance()
{
// 雙重鎖定,保證多執行緒下的單例
if (Instance == null)
{
lock (syncObject)
{
if (Instance == null)
{
Instance = new Singleton_Full();
}
}
}
return Instance;
}
}
/// <summary>
/// 餓漢模式
/// </summary>
public sealed class Singleton_Hungry
{
private static readonly Singleton_Hungry Instance = new Singleton_Hungry();
private Singleton_Hungry() { }
public static Singleton_Hungry GetSingletonInstance()
{
return Instance;
}
}
}
namespace SingletonPattern
{
class Program
{
//客戶端呼叫
static void Main(string[] args)
{
Singleton_Full A = Singleton_Full.GetSingletonInstance();
Singleton_Full B = Singleton_Full.GetSingletonInstance();
if(A == B)
{
Console.WriteLine("飽漢式單例類,實體A與實體B是相同的");
}
Console.WriteLine("----------------------------------------------------");
Singleton_Hungry C = Singleton_Hungry.GetSingletonInstance();
Singleton_Hungry D = Singleton_Hungry.GetSingletonInstance();
if (C == D)
{
Console.WriteLine("餓漢式單例類,實體C與實體D是相同的");
}
Console.ReadKey();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/316029.html
標籤:其他
