<!--[if !supportLists]-->一、 <!--[endif]-->Singleton单件(创建型模式)
<!--[if !supportLists]-->1、 <!--[endif]-->结构(Structure)
<!--[if !vml]--><!--[endif]-->
<!--[if !supportLists]-->2、 <!--[endif]-->单线程Singleton实现
public class Singleton
{
private static Singleton instance;
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
<!--[if !supportLists]-->3、 <!--[endif]-->单线程Singleton模式的几个要点
<!--[if !supportLists]-->a) <!--[endif]-->Singleton模式中的实例构造器可以设置成protected以允许子类派生。
<!--[if !supportLists]-->b) <!--[endif]-->Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
<!--[if !supportLists]-->c) <!--[endif]-->Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样与Singleton模式的初衷违背。
<!--[if !supportLists]-->d) <!--[endif]-->Singleton模式只考虑到对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没有必要对其销毁进行特殊的管理。
<!--[if !supportLists]-->e) <!--[endif]-->不能应对多线程环境:在多线程环境下,使用Singleton模式仍然有可能得到Singleton类的多个实例对象。
<!--[if !supportLists]-->4、 <!--[endif]-->多线程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;
}
}
}
<!--[if !supportLists]-->5、 <!--[endif]-->使用.NET类型初始化机制实现多线程Singleton模式
sealed class Singleton
{
public static readonly Singleton Instance = new Singleton();
private Singleton() { }
}
相当于
sealed class Singleton
{
public static readonly Singleton Instance;
static Singleton()
{
Instance = new Singleton();
}
private Singleton() { }
}