单件模式
单件模式
周银辉
单件模式用于提供一种机制或方法来使得我们可以控制类对象的创建个数,顾名思义它使得系统中某类对象的数目只有一个,当然它也可以用于实现固定数量对象的创建。
意图:
保证一个类只有一个实例,并提供一个该实例的全局访问点
结构:

怎么办?
我们的目的很明确,我们不允许外界任意的调用我们的构造方法来构造类对象,而仅仅为外界提供一个唯一的对象,那么很自然地会联想到如下代码:
应该注意的几点:
1,我们不应该来序列化和反序列化用单件模式实现的对象,否则多次反序列化则可以创建多的实例,这与单件模式是相矛盾的.
2,我们不应该克隆用单件模式实现的对象,否则多次克隆则可以创建多的实例,这与单件模式是相矛盾的.
3,在多线程环境中使用单件模式时要小心.
周银辉
单件模式用于提供一种机制或方法来使得我们可以控制类对象的创建个数,顾名思义它使得系统中某类对象的数目只有一个,当然它也可以用于实现固定数量对象的创建。
意图:
保证一个类只有一个实例,并提供一个该实例的全局访问点
结构:
怎么办?
我们的目的很明确,我们不允许外界任意的调用我们的构造方法来构造类对象,而仅仅为外界提供一个唯一的对象,那么很自然地会联想到如下代码:
1 public class MyClass
2 {
3 private MyClass()
4 {
5 }
6
7 public static GetMyClassObj()
8 {
9 //
10 }
11 }
其中为了防止外界对构造器的访问,我们将构造器的权限设置为private,我们提供一个方法(或属性)来允许外界访问特定的唯一的对象.那么将代码补充完整后为:2 {
3 private MyClass()
4 {
5 }
6
7 public static GetMyClassObj()
8 {
9 //

10 }
11 }
1 public class MyClass
2 {
3 private static readonly MyClass myObj = new MyClass();
4
5 private MyClass()
6 {
7 }
8
9 public static GetMyClassObj()
10 {
11 return myObj;
12 }
13 }
2 {
3 private static readonly MyClass myObj = new MyClass();
4
5 private MyClass()
6 {
7 }
8
9 public static GetMyClassObj()
10 {
11 return myObj;
12 }
13 }
应该注意的几点:
1,我们不应该来序列化和反序列化用单件模式实现的对象,否则多次反序列化则可以创建多的实例,这与单件模式是相矛盾的.
2,我们不应该克隆用单件模式实现的对象,否则多次克隆则可以创建多的实例,这与单件模式是相矛盾的.
3,在多线程环境中使用单件模式时要小心.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述