描述:单例模式要求一个类仅有一个实例,并且提供了一个全局的访问点。
方式一(推荐)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /// <summary> /// 单例模式,静态初始化 /// sealed:密封类,不可被继承,防止子类被实例化而不能保证只有一个实例。 /// private Singleton():用private修改构造函数,防止类在外部被实例。 /// static readonly:表示只能在声明时赋值,或是在静态构造中赋值。 /// </summary> public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; } } |
方式二(不推荐)加锁费资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /// <summary> /// 单例模式,加锁双层判空,延迟加载 /// </summary> public sealed class Singleton2 { private static Singleton2 instance; private Singleton2() { } private static readonly object obj = new object (); public static Singleton2 getInstance() { if (instance == null ) { lock (obj) { if (instance == null ) { instance = new Singleton2(); } } } return instance; } } |
方式三(推荐)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /// <summary> /// 单例模式,静态初始化,延迟加载 /// </summary> public sealed class Singleton3 { public Singleton3() { } public static Singleton3 Instance { get { return Delay.DelayInstance; } } public sealed class Delay { private static readonly Singleton3 delayInstance = new Singleton3(); private Delay() { } public static Singleton3 DelayInstance { get { return delayInstance; } } } } |
应用场景:Windows任务管理器、windows回收站、网站的计数器、日志应用、WebConfig对象的读取、数据库连接池、多线程的线程池、HttpApplication
参考:
http://www.cnblogs.com/Terrylee/category/36516.html
http://www.cnblogs.com/Terrylee/archive/2005/12/09/293509.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】