动机(Motivation)
一些特殊的类 只存在一个实例(确保他们的逻辑正确性)
这个应该是类设计者的责任,而不是使用者的责任。
如何绕过常规的构造器?提供一种机制保证一个类只有一个实例?
意图(Intent)
确保一个类只有一个实例。
单线程Singleton模式实现
class Singleton
{
private static Singleton instance;
private Singleton()
{
}
public static Singleton Instance
{
get
{
if(instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
构造器可以设置为protected以允许子类派生
不要支持ICloneable接口
不要支持序列化
缺点是,不能应对多线程的情况
这个模式,我们只考虑了对象的创建而没有考虑对象的销毁
多线程实现
class MulThreadSingleton
{
private static volatile MulThreadSingleton instance = null;
private static Object lockHelper = new Object();
private MulThreadSingleton()
{
}
public static MulThreadSingleton Instance
{
get
{
if(instance == null)
{
lock(lockHelper)
{
if(instance == null)
{
instance = new MulThreadSingleton();
}
}
}
return instance;
}
}
}
使用静态构造器