天天看点

极速理解设计模式系列: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