且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

极速理解设计模式系列:11.单例模式(Singleton Pattern)

更新时间:2022-06-23 18:18:28

单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

三要点

       一、单例类只能有一个实例

       二、单例类必须自行创建自身实例

       三、单例类自行向整个系统提供实例

类图

极速理解设计模式系列:11.单例模式(Singleton Pattern)

应用场景:在整个系统中只需要一个类实例的全局可用类。比如License验证,内存管理等。

分析:其内部有很多需要提供全局访问的方法,对于C#中单例模式有两种创建:双检索单例、饿汉单例。

下面我们在控制台程序中演示如何创建者两种单例模式:

双检索单例

 


  1. //双检锁的单例模式 
  2.    public class License 
  3.    { 
  4.        private static License instance ; 
  5.        private static object _lock = new object(); 
  6.        private License() { } 
  7.        public static License GetInstance() 
  8.        { 
  9.            if (instance == null
  10.            { 
  11.                lock (_lock) 
  12.                { 
  13.                    if (instance == null
  14.                    { 
  15.                        instance = new License(); 
  16.                    } 
  17.                } 
  18.            } 
  19.            return instance; 
  20.        } 
  21.        public void CheckLicense(int code) 
  22.        { 
  23.            if (code == 20110925) 
  24.                Console.WriteLine("通过了License验证"); 
  25.            else 
  26.                Console.WriteLine("没有通过License验证");  
  27.        } 
  28.    } 

饿汉单例

 


  1. //饿汉单例模式 
  2. public class GcManager 
  3.     public static readonly GcManager instance = new GcManager(); 
  4.     private GcManager() { } 
  5.     public void FreeMemory() 
  6.     { 
  7.         GC.Collect(); 
  8.         Console.WriteLine("开始释放内存!"); 
  9.     } 
  10.     public void FreeObject() 
  11.     { 
  12.         Console.WriteLine("开始释放对象!"); 
  13.     } 

客户端应用

 


  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         // 
  5.         License.GetInstance().CheckLicense(20110925); 
  6.          
  7.         GcManager.instance.FreeMemory(); 
  8.         GcManager.instance.FreeObject(); 
  9.  
  10.         Console.ReadLine(); 
  11.     } 

        如果需要源码请点击 SingletonPattern 下载。


本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827002