设计模式:单例模式
单例模式是用来保证进程中,某个类只有一个实例。因为有时候某个类很占用资源,例如:数据库连接、或者是类在构造的时候很耗费资源和时间。
单例模式的实现分为两种:饿汉式和懒汉式。前者是在静态构造函数执行时就立即实例化,后者是在程序执行过程中第一次需要时再实例化。
懒汉式
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /// <summary> /// 懒汉式 /// </summary> public class Singleton { private Singleton() //私有化构造函数,避免外部创建 { long lResult = 0; for ( int i = 0; i < 1000000; i++) { lResult += i; } Thread.Sleep(2000); Console.WriteLine($ "{this.GetType().Name}被构造一次!" ); } /// <summary> /// 静态变量 (定义成静态变量,保障全局唯一) /// </summary> private static volatile Singleton _singleton = null ; //volatile 促进线程安全 private static object sinletonLock = new object (); /// <summary> /// 公开的静态方法提供对象实例 /// </summary> /// <returns></returns> public static Singleton CreateInstance() { //解决多线程调用时线程不在进行加锁然后进行判断。 if (_singleton == null ) { lock (sinletonLock) { //保证只被实例化一次 if (_singleton == null ) { _singleton = new Singleton(); } } } return _singleton; } } |
懒汉式单例主要包括三部分:
1.私有化构造函数,避免外部创建。
2.公开的静态方法提供对象实例。
3. 静态变量 (定义成静态变量,保障全局唯一)。
饿汉式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Singleton { private static readonly Singleton _instance; static Singleton() { _instance = new Singleton(); } public static Singleton Instance { get { return _instance; } } } |
饿汉式是在静态构造函数中立即进行实例化。注意,为了确保单例性,需要使用 readonly 关键字声明实例不能被修改。
以上写法可简写为:
1 2 3 4 5 6 7 8 9 10 11 | public class Singleton { private static readonly Singleton _instance = new Singleton(); public static Singleton Instance { get { return _instance; } } } |
在 C# 7 中还可以进一步简写,一句代码就搞定了,此写法如下:
1 2 3 4 | public class Singleton { public static Singleton Instance { get ; } = new Singleton(); } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤