天天看點

極速了解設計模式系列:11.單例模式(Singleton Pattern)

單例模式:確定某一個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體。這個類稱為單例類。

三要點:

       一、單例類隻能有一個執行個體

       二、單例類必須自行建立自身執行個體

       三、單例類自行向整個系統提供執行個體

類圖:

<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

繼續閱讀