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

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

三要点

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

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

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

类图

 

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

 

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

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

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

双检索单例

极速理解设计模式系列:11.单例模式(Singleton Pattern)
 //双检锁的单例模式
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验证");
}
}
极速理解设计模式系列:11.单例模式(Singleton Pattern)

饿汉单例

极速理解设计模式系列:11.单例模式(Singleton Pattern)
    //饿汉单例模式
public class GcManager
{
public static readonly GcManager instance = new GcManager();
private GcManager() { }
public void FreeMemory()
{
GC.Collect();
Console.WriteLine("开始释放内存!");
}
public void FreeObject()
{
Console.WriteLine("开始释放对象!");
}
}
极速理解设计模式系列:11.单例模式(Singleton Pattern)

客户端应用

极速理解设计模式系列:11.单例模式(Singleton Pattern)
    class Program
{
static void Main(string[] args)
{
//
License.GetInstance().CheckLicense(20110925);

GcManager.instance.FreeMemory();
GcManager.instance.FreeObject();

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

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



本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/09/29/2190024.html,如需转载请自行联系原作者


上一篇:Java单例模式深入详解


下一篇:【云计算的1024种玩法】让ECS掺金坷垃,轻松打造离线下载服务器