随笔 - 268  文章 - 0  评论 - 1028  阅读 - 160万

保证一个类仅有一个实例:单例模式

场景:微软的windows xp操作系统,ctrl+alt+del键都会弹出一个windows任务管理器(这时不关闭这个任务管理器),继续ctrl+alt+del键还是一个windows任务管理器。鉴于本人水平有限,上面的场景举例可能不合适,但是很接近一个基本的设计模式:单例模式。Code is cheap.下面用c#代码模拟出一个类似任务管理器的创建:

Code
上面创建实例的基本思想是new一个对象的时候,判断静态的类变量是否已经有实例,构造函数私有,这样外部代码不能直接new来实例化对象。这是因为我们都知道所有类都有构造函数,不编码写构造函数则系统默认生成无参数的构造方法,但如果有显式定义的构造方法,默认的就会失效。ps:在定义可序列化的类的时候,默认构造函数是必须的,所以如果你显式定义了一个带参数的构造方法,一定不能忘记要再写一个没有参数的构造方法。
好了,上面的代码ms已经简单的实现了对唯一实例的受控访问。不过在多线程的程序中,上面的代码会有可能创建多个实例的。给进程加把锁,用lock解决一下:
Code
上面那种做法可以创建单一实例,可是每次调用创建方法时,都要lock,影响性能,有一种双重锁定的方法:
Code
最后再看一个所谓的饿汉式单例类:
Code
posted on   JeffWong  阅读(2541)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2009年3月 >
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 1 2 3 4
5 6 7 8 9 10 11

I know how to make it works and I want to know how it works.
点击右上角即可分享
微信分享提示