设计模式-单例模式
单例模式:简单地说就是一个 实例即一个对象,全局只用这一个对象。
如何保证一个对象呐?
私有的构造函数,保证外界不能直接new 一个对象,那么就保证了单一性;
但是只是不让外界new,但是第一个对象怎么来呐?
那就要在单例中创建一个方法,以用来创造这第一个对象,其他地方想要用,直接调用这个方法即可!
class Singleton { //单例模式结构: private static Singleton instance; // 私有构造方法Singleton(),外界不能使用new关键字来创建此类的实例了。 private Singleton() { } //方法GetInstance(), 此方法是本类实例的唯一全局访问点。 public static Singleton GetInstance() { //如实例不存在,则New一个新实例,否则返回已有实例 if (instance == null) { instance = new Singleton(); } return instance; } }
==========以上就是 单例模式的基本 结构
如果在多线程的情况下,单例模式会不会被破坏,创造出多个实例。答案是会的,会出现这种情况,那么如何补救?就需要 加锁了
class Singleton { //单例模式结构: private static Singleton instance; // 私有构造方法Singleton(),外界不能使用new关键字来创建此类的实例了。 private static readonly object _object = new object();//创建锁 private Singleton() { } //方法GetInstance(), 此方法是本类实例的唯一全局访问点。 public static Singleton GetInstance() { //如实例不存在,则New一个新实例,否则返回已有实例 if (instance == null) { //现在还不能直接创建,要加锁,让线程一个个进来 lock (_object) { //一个个进来如果还是 null 的话,就说明确实没有创建实例了 if (instance==null) { instance = new Singleton(); } } } return instance; } }
加上锁的话,就更能保证单例模式的运行了
============题外话:什么时候使用 锁?=> 当多个线程调用同一个方法时,会需要锁 阻塞一下线程
posted on 2022-08-19 14:50 泰坦尼克号上的活龙虾 阅读(18) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库