Singleton模式是最简单的模式,比较汗颜的是自己一直以来使用的是单线程的Singleton模式,最近在听了李建忠老师的模式讲座录像后,才发现自己一直没注意到这点。
下面内容整理自李建忠老师的讲课内容:
单线程的Singleton模式
public class Singleton
{
private static Singleton instance;
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
}
要点:
多线程的Singleton模式
public class Singleton
{
private static volatile Singleton instance = null;
private static object lockHelper = new object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
代码说明:
使用.net特有的支持多线程的单件模式代码
public sealed class Singleton
{
public static readonly Singleton Instance = new Singleton();
private Singleton() { }
}
代码说明:
public sealed class Singleton
{
public static readonly Singleton Instance;
static Singleton()
{
Instance = new Singleton();
}
private Singleton() { }
}
缺点: