设计模式之单例模式
一.模式介绍
单例模式(singleton)在实际编写代码中非常常用的一种设计模式,它保证了一个类仅有一个实例,
并且提供了一个访问它的全局访问点。
二.模式结构
单例模式的结构如下图所示:
代码如下所示:
class Singleton
{
private static Singleton instance;
private Singleton()
{
}
public static Singleton GetInstance()
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
三.扩展
上述写得单例模式在一般情况下是没有问题的,但当多线程时可能就会创建多个实例,此时我们可以通过lock来限制线程保证其只生成一个单例,代码如下:
class ThreadSingletoncs
{
private static ThreadSingletoncs instance;
private static readonly object syncRoot = new object();
private ThreadSingletoncs()
{
}
public static ThreadSingletoncs GetInstance()
{
if(instance == null)
{
lock(syncRoot)
{
if(instance == null)
{
instance = new ThreadSingletoncs();
}
}
}
return instance;
}
}
我们也可以在程序加载时就实例化出一个实例,此后不在产生。代码如下,
public sealed class SealedSingleton
{
private static readonly SealedSingleton instance = new SealedSingleton();
private SealedSingleton()
{ }
public static SealedSingleton GetInstance()
{
return instance;
}
}
这种方式因为加载时就将自己实例化了,所以被称为饿汉式单例;而上面第一次引用实例化的被称为懒汉式单例。实际写代码过程中,我们可以根据自己的需求来生成单例。
加载时就将自己实例化了,所以被称为饿汉式单例;而上面第一次引用实例化的被称为懒汉式单例。实际写代码过程中,我们可以根据自己的需求来生成单例。