通常的Singleton写法,C#为例:

Code
class Singleton
{
private static Singleton instance;
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
通常的doublecheck写法:

Code
class DoubleCheck
{
private static volatile DoubleCheck instance = null;
private static object lockHelper = new object();
private DoubleCheck() { }
public static DoubleCheck Instance
{
get
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new DoubleCheck();
}
}
}
return instance;
}
}
}
改进写法,同时适用单线程与多线程:

Code
class SingletonAndDoubleCheck
{
public static readonly SingletonAndDoubleCheck Instance = new SingletonAndDoubleCheck();
private SingletonAndDoubleCheck() { }
}
新写法的不足之处就是不能使用参数化构造函数,需要另写初始化函数。