2.C#设计模式系列01_单例模式_Singleton
前言:单例模式个人觉得是比较容易理解,而且面试比较容易遇到,但是在实际生产中要慎用的一种设计模式,以前总觉得很难,系统的了解了下,主要有以下几种写法
1.双if + lock
1 public class SingletonModel { 2 3 private static SingletonModel instance = null; 4 private static object singleton_lock = new object(); 5 private SingletonModel() { 6 Console.WriteLine("构造函数"); 7 } 8 9 //多线程测试 10 public static SingletonModel SingletonCreatInstance() { 11 if (instance == null){ 12 lock (singleton_lock){ 13 if (instance == null){ 14 instance = new SingletonModel(); 15 } 16 } 17 } 18 return instance; 19 } 20 }
2.静态成员变量
public class SingletonTwo{ private static SingletonTwo slModel = new SingletonTwo(); private SingletonTwo() { Console.WriteLine("构造函数"); } public static SingletonTwo CreateInstanceTwo{ get{ return slModel; } } }
3.静态构造函数
public class SingletonOne { //静态构造函数 private static SingletonOne slModel =null; static SingletonOne(){ slModel = new SingletonOne(); Console.WriteLine("构造函数"); } public static SingletonOne CreateInstance() { return slModel; } }
4.Lazy延时加载
public class SingletonThree { private static Lazy<SingletonThree> lazyModel = new Lazy<SingletonThree>(() => new SingletonThree()); private SingletonThree(){ } public static SingletonThree CreatInstance() { return lazyModel.Value; } }
public class SingletonFour{ private static Lazy<SingletonFour> lazyModel; private SingletonFour(){ } static SingletonFour() { lazyModel = new Lazy<SingletonFour>(new SingletonFour()); } public static SingletonFour CreatInstance() { return lazyModel.Value; } }
总结:
套路无非就是 1.私有构造函数或者静态构造函数 + 2.私有静态成员变量 + 3.公共对外的访问实例方法 ,然后根据实际情况选择合适的用法
ps:Lazy 用法个人感觉使用静态成员变量和静态构造是一样的
分类:
NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)