1、单例模式的介绍 “单例”即为一个类只有一个实例,所以单例模式的作用就确保一个类只有一个实例的实现方式 public class Single { //定义一个静态变量来保存类的实例 static Single _single;
//定义私有构造函数,使外界无法实例化该类,如果不声明该构造函数,编译器会默认声明一个public的无参构造函数 private Single() { }
//定义一个公共属性,通过属性来访问该类 //第一种 单线程没问题,多线程访问,就会创建多个实例 public static Single GetInstance { get { if (_single == null) { _single = new Single(); } return _single; } }
static readonly object _padlock = new object();
//第二种,多线程访问时,会多次对_padlock进行加锁,造成资源浪费 public static Single GetInstance { get { lock(_padlock) { if(_single == null) { _single = new Single(); } return _single; } } }
//第三种,双重加锁,从效率及合规上最合理的声明方式 public static Single GetInstance { get { if (_single == null) { lock (_padlock) { if (_single == null) { _single = new Single(); } } } return _single; } } }