大话设计模式读书笔记3——单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
我们来看一下单例模式下的饿汉模式代码:
/// <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; } }
饿汉模式和懒汉模式的区别:
饿汉模式加载类时比较慢,但运行时获取对象的速度比较快,线程安全的
懒汉模式加载类时比较快,但运行时获取对象的速度比较慢,线程不安全的
C# 下的单例模式:
1、线程不安全:
//C# 下的单例模式(线程不安全) public class Singleton3 { public static readonly Singleton3 instance = new Singleton3(); private Singleton3() { } }
上面的实现完全可以达到单例模式的意图,保证一个类仅且有一个实例,并提供一个全局访问点.而这在实际应用我们还得注意一点,就是在多线程的调用.于此,我们还得保证线程安全.要保证线程安全其实也是很简单就可以实现的,只需要通过加锁和双重判断就OK,下面是简单的多线程的线程安全的实现:
2、线程安全:
//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; } } }
作者:Rising Sun
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库