最近的工作中用到了很多单例类,以前听说单例模式是一种很重要的模式,由于要用到,所以就学习了一下。单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。
class Singleton
{
private static Singleton instance;
/// <summary>
/// 把构造函数写成私有,在类外部就没办法new对象
/// </summary>
private Singleton()
{
}
/// <summary>
/// 全局的访问点
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
上面的例子只是单线程,在多线程程序中还是有可能创建多个实例,解决办法是
class Singleton
{
private static Singleton instance;
private static readonly object syncRoot = new object();
/// <summary>
/// 把构造函数写成私有,在类外部就没办法new对象
/// </summary>
private Singleton()
{
}
/// <summary>
/// 全局的访问点
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
}