1. 单件模式的经典实现
publicclass Singleton
{
private static SingletonuniqueInstance;
private Singleton() { }
public static Singleton GetInstance()
{
if (uniqueInstance == null)
uniqueInstance = newSingleton();
return uniqueInstance;
}
}
2. 定义单件模式
单件模式确保一个类只有一个实例,并且提供一个全局的访问点。
把某个类设计成自己管理的一个单独实例,避免其他类再自行产生实例,只能通过单件类获取单件实例
对该实例提供全局的访问点,当需要实例时,向类查询,会返回单个实例。
类图:
3. 处理多线程
l 使用线程锁
publicclass Singleton
{
private static Singleton uniqueInstance;
private static object obj = new object();
private Singleton() { }
public static Singleton GetInstance()
{
if (uniqueInstance == null)
{
lock (obj)
{
if (uniqueInstance == null)
uniqueInstance = new Singleton();
}
}
return uniqueInstance;
}
}
l 使用“急切”创建实例,而不用延迟实例化的做法
public class Singleton
{
private staticSingleton uniqueInstance new Singleton();//在静态的初始化器中创建单件
private Singleton() { }
public static Singleton GetInstance()
{
return uniqueInstance;
}
}
4. 总结
l 单件模式确保程序中一个类最多只有一个实例。
l 单件模式也提供访问这个实例的全局点。
l 确定在性能和资源上的限制,小心选择适合的方案来实现单件,以解决多线程问题。