当前位置: 首页 > news >正文

单例模式的实现方法

        单例模式(Singleton Pattern)是一种常用的软件设计模式,用于确保一个类只有一个实例,并提供一个全局访问点这种模式在需要控制对资源(如配置对象、线程池、缓存等)的访问时特别有用。        

一、单例模式的实现方式

  1. 懒汉模式(Lazy Initialization)

    • 延迟初始化:类的第一个实例在第一次被使用时创建。

    • 线程安全:通过双重检查锁定(Double-Checked Locking)来确保线程安全。

    • 性能:由于延迟初始化,可以减少不必要的对象创建,从而提高性能。

      class Singleton {
      public:static Singleton* getInstance() {if (_instance == nullptr) {std::lock_guard<mutex> lock(_mutex);if (_instance == nullptr) {_instance = new Singleton();}}return _instance;}private:Singleton() {}  // 私有构造函数,防止直接实例化~Singleton() {}  // 私有析构函数,确保正确清理private:static Singleton* _instance;  // 静态实例static std::mutex _mutex;  // 互斥锁
      };
  2. 饿汉模式(Eager Initialization)

    • 立即初始化:类的第一个实例在程序启动时就创建。

    • 线程安全:通常不需要额外的同步机制,因为实例在程序启动时就创建了。

    • 性能:可能会因为提前创建实例而增加一些开销,但如果实例创建是轻量级的,这可能不是问题。

      class Singleton {
      public:Singleton() {}  // 私有构造函数,防止直接实例化static Singleton& getInstance() {static Singleton instance(_instance);return instance;}private:Singleton() {}  // 私有构造函数,防止直接实例化static Singleton _instance;  // 静态实例
      };

        在饿汉模式中,实例在第一次调用 getInstance 方法时创建,而在饿汉模式中,实例在类加载时就创建。选择哪种模式取决于具体需求和上下文。饿汉模式可以节省资源,但如果初始化顺序很重要,或者需要确保在多线程环境中安全地创建实例,饿汉模式可能更合适。 

http://www.xdnf.cn/news/306829.html

相关文章:

  • Android SDK 国内镜像及配置方法(2025最新,包好使!)
  • MySQL同步ES的6种方案!
  • 74LS138译码器的编址技术
  • 存储系列知识
  • YOLO8之学习指南
  • 行业黑化.新平面
  • 系统学习算法:动态规划(斐波那契+路径问题)
  • 第2章——springboot核心机制
  • Spring Boot Validation实战详解:从入门到自定义规则
  • DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成
  • 2025 RSAC|大语言模型应用风险与厂商攻防新策略
  • C#经典算法面试题
  • 【STM32 学习笔记】EXTI外部中断
  • 单片机-STM32部分:5、STM32CubeMX实现HAL点灯
  • Python之内省与反射应用
  • 多语言笔记系列:Polyglot Notebooks 中使用扩展库
  • Kotlin Android开发过渡指南
  • 【笔记】【B站课程 pytorch】梯度下降模型
  • 【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本(非常简洁快速)
  • 今日行情明日机会——20250506
  • 电商双十一美妆数据分析
  • TypeScript速成
  • 使用原生 CSS 实现轮播
  • # YOLOv1:开启实时目标检测的新时代
  • Python基础学习-Day17
  • 20. LangChain电商场景:构建智能客服与个性化推荐系统
  • BufferGeometryUtils
  • Qt案例 以单线程或者单生产者多消费者设计模式实现QFTP模块上传文件夹功能
  • 基于GA遗传优化的不同规模城市TSP问题求解算法matlab仿真
  • 如何在 Ubuntu 24.04 本地安装 DeepSeek ?