单例模式
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式的结构图如下:

懒汉式实现(延迟加载,在用到的时候才会实例化那个类)
public class Singleton
{
//私有化构造函数,不让外部实例化本类
private Singleton(){}
//定义一个变量来存储创建好的实例,由于这个变量要在静态方法中使用,所以被迫加了static修饰
//并不是有意用static的特性
private static Singleton instance=null;
private static readonly object syncRoot=new object();
public static Singleton GetInstance()
{
//使用了双重检查加锁
if(instance==null)
{
//加锁保证同时只有一个线程可以访问
lock(syncRoot)
{
if(instance==null)
{
instance=new Singleton();
}
}
}
return instance;
}
}
饿汉式实现(在类加载的时候就实例化好,不管用没用到)
public class Singleton
{
//私有化构造函数,不让外部实例化本类
private Singleton(){}
//定义一个变量来存储创建好的实例
//用到了static的特性(1.类加载的时候只初始化一次 2.所有实例的共享一块内存区域)
//由于类加载的时候不会发生多线程并发,所以饿汉式实现不需要加锁
private static Singleton instance=new Singleton();
//当外部调用这个静态方法时,会执行该类的静态构造函数来加载该类,静态构造函数会初始化所有静态变量,包括 instance
public static Singleton GetInstance()
{
return instance;
}
}
单利模式的本质:控制实例数目。

浙公网安备 33010602011771号