單例模式:確定某一個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體。這個類稱為單例類。
三要點:
一、單例類隻能有一個執行個體
二、單例類必須自行建立自身執行個體
三、單例類自行向整個系統提供執行個體
類圖:
<a href="http://blog.51cto.com/attachment/201204/162428853.jpg" target="_blank"></a>
應用場景:在整個系統中隻需要一個類執行個體的全局可用類。比如License驗證,記憶體管理等。
分析:其内部有很多需要提供全局通路的方法,對于C#中單例模式有兩種建立:雙檢索單例、餓漢單例。
下面我們在控制台程式中示範如何建立者兩種單例模式:
雙檢索單例:
//雙檢鎖的單例模式
public class License
{
private static License instance ;
private static object _lock = new object();
private License() { }
public static License GetInstance()
{
if (instance == null)
{
lock (_lock)
{
if (instance == null)
{
instance = new License();
}
}
}
return instance;
}
public void CheckLicense(int code)
if (code == 20110925)
Console.WriteLine("通過了License驗證");
else
Console.WriteLine("沒有通過License驗證");
}
餓漢單例:
//餓漢單例模式
public class GcManager
{
public static readonly GcManager instance = new GcManager();
private GcManager() { }
public void FreeMemory()
{
GC.Collect();
Console.WriteLine("開始釋放記憶體!");
}
public void FreeObject()
Console.WriteLine("開始釋放對象!");
}
用戶端應用:
class Program
static void Main(string[] args)
//
License.GetInstance().CheckLicense(20110925);
GcManager.instance.FreeMemory();
GcManager.instance.FreeObject();
Console.ReadLine();
本文轉自程興亮 51CTO部落格,原文連結:http://blog.51cto.com/chengxingliang/827002