设计模式漫谈之单例模式
还是看代码能让我静下心来。我现在语言表达能力严重下降,又不自信。fuck,不想了,我还是我,世上独一无二的我。走自己的路,让别人看吧。马上4月了,天也变热了!
闲话少扯,今天说单例模式,就算22种模式都不知道,也应该知道单例模式,这个在实际项目中用的比较多。
一个应用是一个进程,在内存中分配一定的空间。如果想让某个实例在这个空间中独一无二,就需要用单例模式即栈中的地址和堆中的数据是同一个。
创建模式意思就是创建对象的方法。
算了,直接上例子吧,我来解释例子。网上说单例模式有很多种写法,现在只说比较经典的模式吧。
class Singleton
{
//静态对象的生存期比较长,直到进程结束,空间释放。
private static Singleton instance;
//一个托管堆得地址
private static readonly object syncRoot = new object();
//如果一个类的构造函数是私有的,那外界就没法New 这个对象(只要有显式构造函数,就会隐藏掉默认的构造函数【默认静态构造函数除外】)
private Singleton()
{
}
//这种写法叫做双重锁
public static Singleton GetInstance()
{
if (instance == null)
{
//多线程访问的时候,排队,如果没有锁每一处的代码都有可能多个线程同时访问到。
lock (syncRoot)
{
//再次判断,避免重复创建对象
if (instance == null)
{
instance = new Singleton();//外界无法New 但是本类中是可以new的
}
}
}
return instance;//返回的就是内存中独一无二的静态那个实例。
}
}
总结:这个单例模式还是比较简单的。要明白生存周期,指时间上的概念,作用域是空间上的概念。
【推荐】国内首个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——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?