单例模式是一种经常使用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。经过单例模式能够保证系统中一个类只有一个实例并且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。若是但愿在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。设计模式
咱们来看一下单例模式下的饿汉模式代码:安全
/// <summary> /// 饿汉模式 /// </summary> public class Singleton { //私有的构造器 private Singleton() { } //私有的静态实例 private static Singleton instance = new Singleton(); public static Singleton GetInstance() { return instance; } }
懒汉模式代码:多线程
/// <summary> /// 懒汉模式 /// </summary> public class Singleton2 { //私有的构造器 private Singleton2() { } //私有的静态实例 private static Singleton2 instance = null; public static Singleton2 GetInstance() { if (instance==null) { instance=new Singleton2(); } return instance; } }
饿汉模式和懒汉模式的区别:函数
饿汉模式加载类时比较慢,但运行时获取对象的速度比较快,线程安全的spa
懒汉模式加载类时比较快,但运行时获取对象的速度比较慢,线程不安全的线程
C# 下的单例模式:设计
一、线程不安全:code
//C# 下的单例模式(线程不安全) public class Singleton3 { public static readonly Singleton3 instance = new Singleton3(); private Singleton3() { } }
上面的实现彻底能够达到单例模式的意图,保证一个类仅且有一个实例,并提供一个全局访问点.而这在实际应用咱们还得注意一点,就是在多线程的调用.于此,咱们还得保证线程安全.要保证线程安全其实也是很简单就能够实现的,只须要经过加锁和双重判断就OK,下面是简单的多线程的线程安全的实现:对象
二、线程安全: blog
//C# 下的单例模式(线程安全) public class Singleton4 { /// <summary> /// 声明一个静态锁 /// </summary> private static object lockHelper = new object(); //私有构造函数 private Singleton4() { } //注意使用 volatile 关键字 private static volatile Singleton4 instance = null; //静态属性 public static Singleton4 Instance { get { if (instance == null) //双检查 { lock (lockHelper) { if (instance == null) { instance = new Singleton4(); } } } return instance; } } }