单例模式 -- 大话设计模式
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
单例模式:保证一个类只有一个实例,并听一个访问它的全局访问点;单例的实现分为两种,懒汉式单例模式和饿汉式单例模式
1.懒汉式单例模式
public class Singleton { private static Singleton instance; //进程辅助对象,多线程同时访问该类时,对该对象加锁,只有一个线程可以进入 private static readonly object syncRoot = new object(); /// <summary> /// 定义个私有的构造方法,防止外界通过new创建该类的实例 /// </summary> private Singleton() { } /// <summary> /// 获取本类实例的唯一全局访问点 /// </summary> public static Singleton GetInstance() { //先判断实例是否存在,不存在再加锁,提高访问性能 if (instance == null) { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } } return instance; } public void Action() { Console.WriteLine("我是单例的具体业务……"); } }
2.饿汉式单例模式
/// <summary> /// 防止派生,派生可能会增加实例 /// </summary> public sealed class Singleton { //由于定义为readonly,意味着只能在静态初始化期间或者构造函数中分配变量 private static readonly Singleton instance = new Singleton(); /// <summary> /// 定义个私有的构造方法,防止外界通过new创建该类的实例 /// </summary> private Singleton() { } /// <summary> /// 获取本类实例的唯一全局访问点(由于定义了静态的只读变量,因此不需要考虑线程安全问题) /// </summary> public static Singleton GetInstance() { return instance; } public void Action() { Console.WriteLine("我是单例的具体业务……"); } }
开启场景模拟
static void Main(string[] args) { Singleton.GetInstance().Action(); }