单例模式的介绍
单例模式是设计模式中常用的设计模式之一,它提供一种创建对象的方式。
1 2 3 4 5 6 7 8 9 | 这种模式仅涉及一个单一的类,该类负责创建自身的对象(下面称对象为实例),同时确保只有一个对象被创建。 单例模式的应用:windows操作系统的任务管理器只有一个,用户无法打开两个任务管理器窗体; web网站访问量计数器,需要使用单例模式,保证计数准确; 多线程文件读写问题,一个文件不能被多个线程同时读写, 使用单例模式防止文件读写冲突,每一个线程读写文件必须通过唯一的实例进行操作。 单例模式实现思路:在内存中只有一个实例,应用单例模式的类的构造函数是私有的(对象不可以随便New了), 类的对象通过类内的公有方法创建,所以实现单例模式先判断内存中是否已存在类的实例, 有则直接返回该实例 |
单例模式有多种写法,下面只给出两种方式:双重校验锁和静态内部类
双重校验锁:
/// <summary> /// 单例模式的实现 /// </summary> public class Singleton { // 定义一个静态变量来保存类的实例 private static Singleton uniqueInstance; // 定义一个标识作为线程间同步的标志 private static readonly object locker = new object(); // 定义私有构造函数,使外界不能创建该类实例 private Singleton() { } // 定义公有方法,提供一个全局访问点,供外部访问 public static Singleton GetInstance() { // lock方法会消耗计算机性能,使用lock方法前先判断uniqueInstance == null,可以降低性能消耗 //当第一个线程运行到这里时,此时会对locker对象 "加锁", // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁 // lock语句运行完之后(即线程运行完之后)会对该对象"解锁" // 双重锁定只需要一句判断就可以了 if (uniqueInstance == null) { lock (locker) { // 如果类的实例不存在则创建,否则直接返回已创建的对象 if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } } return uniqueInstance; } }
静态内部类
public class Singleton { //静态内部类 private static class StaticSingleton { //创建单例模式的实例 public static Singleton SingletonInside = new Singleton(); } // 定义私有构造函数 private Singleton(){ } public static Singleton GetSingleton() { return StaticSingleton.SingletonInside; } }
https://www.cnblogs.com/c-djt/p/6416273.html
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧