单例模式
[ Singleton ]
保证一个类仅有一个实例 , 并提供一个访问它的全局访问点 。 类的本身负责保存它的唯一实例 , 并保证没有其他实例可以被创建 。
Singleton模式是限制而不是改进类的创建。
Singleton类中的实例构造器可以设置为Protected以允许子类派生。 但是不能为 public , 禁止在类的外部使用 new 关键字创建实例 。
Singleton模式一般不要支持Icloneable接口,因为这可能导致多个对象实例,与Singleton模式的初衷违背。
Singleton模式一般不要支持序列化,这也有可能导致多个对象实例,这也与Singleton模式的初衷违背。
Singleton只考虑了对象创建的管理,没有考虑到销毁的管理,就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。
理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的构造器的任意调用”。
可以很简单的修改一个Singleton,使它有少数几个实例,这样做是允许的而且是有意义的。
源码 :
class Singleton
{
private Singleton(){}; //显示的指定默认构造函数的访问级别 , 禁止在类的外部使用 new 关键字来创建类的实例 。
private static Singleton slton = null; //声明一个类本身对象的引用 。
1 .不考虑线程安全
public static Singleton Instance()
{
if(slton==null)
{
slton = new Singleton();
}
return slton;
}
2 .考虑线程安全
private static readonly object obj = new object();
public static Singleton Instance()
{
if(slton==null)
{
lock(obj)
{
if(slton==null)
{
slton = new Singleton();
}
}
}
return slton;
}
3 . NET 特有
public static readonly Singleton slton = new Singleton(); 静态的构造函数 , 直接可以在 readonly 内部实现了线程安全
}