单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
三要点:
一、单例类只能有一个实例
二、单例类必须自行创建自身实例
三、单例类自行向整个系统提供实例
类图:
应用场景:在整个系统中只需要一个类实例的全局可用类。比如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();
- }
- }
如果需要源码请点击 SingletonPattern 下载。
本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827002