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

C++开发/Qt开发:单例模式介绍与应用

单例模式是软件设计模式中最简单也是最常用的一种创建型设计模式。它的核心目标是确保一个类在整个应用程序生命周期中只有一个实例,并提供一个全局访问点。

笔者白话版理解:你创建了一个类,如果你希望这个类对象在工程中应用时只创建一次,不能多次创建,比如:TCP通信时,通信模式为一对多,只能有一个服务器,而客户端可以有多个,那么你在创建服务器类时,就可以使用单例模式,这样就可以保证工程中只会有一个服务器。

核心概念

三大要点

  1. 私有化构造函数 - 防止外部直接创建实例
  2. 私有化拷贝构造函数和赋值操作符 - 防止实例被复制
  3. 提供全局访问的静态方法 - 获取唯一的实例

主要特点

  1. 唯一实例:保证一个类只有一个实例存在

  2. 全局访问:提供统一的访问接口

  3. 延迟初始化:实例在第一次使用时才被创建

  4. 线程安全:在多线程环境下也能保证唯一性

话不多说,直接上例子

基于Qt的应用:

// LaserStabilizeWin.h文件class LaserStabilizeWin : public QWidget
{Q_OBJECT
public:static LaserStabilizeWin* instance();static void disinstance();private:explicit LaserStabilizeWin(QWidget *parent = nullptr); //私有化构造函数~LaserStabilizeWin();
};
// LaserStabilizeWin.cpp#include "LaserStabilizeWin.h"LaserStabilizeWin* LaserStabilizeWin::m_pInstance = NULL; //静态成员定义
LaserStabilizeWin *LaserStabilizeWin::instance()
{if (m_pInstance == NULL){m_pInstance = new LaserStabilizeWin(NULL);}return m_pInstance;
}void LaserStabilizeWin::disinstance()
{delete m_pInstance;m_pInstance = nullptr;
}LaserStabilizeWin::LaserStabilizeWin(QWidget *parent) : QWidget(parent)
{qDebug()<<"构造函数";
}LaserStabilizeWin::~LaserStabilizeWin()
{qDebug()<<"析构函数";
}

在纯C++开发中的应用,和上面的区别不大:

class BestSingleton {
public:static BestSingleton& getInstance() {static BestSingleton instance;return instance;}// 业务方法...private://私有化构造函数和析构函数 BestSingleton() = default;~BestSingleton() = default;BestSingleton(const BestSingleton&) = delete;BestSingleton& operator=(const BestSingleton&) = delete;
};

使用场景

  1. 资源共享:如数据库连接池、线程池

  2. 配置管理:全局配置信息

  3. 日志记录:统一的日志系统

  4. 缓存系统:全局缓存管理

  5. 设备控制:如打印机、硬件设备控制

http://www.dtcms.com/a/340919.html

相关文章:

  • 系统架构设计师备考第1天——系统架构概述
  • Redis-缓存-雪崩-持久化、集群、灾备
  • VSCode架构解析
  • MyIP:开源的功能强大的网络诊断工具箱,解析与部署
  • PyTorch中的c10::ArrayRef和at::IntArrayRef
  • 【图像算法 - 19】慧眼识苗:基于深度学习与OpenCV的大棚农作物生长情况智能识别检测系统
  • 基于最小二乘支持向量机的数据回归预测 LSSVM
  • 第四章:大模型(LLM)】07.Prompt工程-(4)思维链(CoT, Chain-of-Thought)Prompt
  • python的物资管理系统
  • Java内功修炼(2)——线程安全三剑客:synchronized、volatile与wait/notify
  • MongoDB 分片集群修改管理员密码
  • 密码加密算法和JWT无状态认证
  • K距离间隔重排字符串 (LeetCode 358) — Swift解法 + 可运行Demo
  • 360T7刷OpenWRT笔记
  • 深入解析EventPoller:Disruptor的轮询式事件处理机制
  • Download:几款主流的全球范围的NDVI产品参数说明和下载
  • Spring Boot 发展史
  • 机器学习——数据清洗
  • JS对象与JSON转换全解析
  • C/C++嵌入式笔试核心考点精解
  • AI 与 OCR 识别:深度融合的智能信息提取技术
  • Elasticsearch 写入全链路:从单机到集群
  • 实验8.20
  • nvidia最新论文:小型语言模型是代理人工智能的未来
  • iOS App 上架实战 从内测到应用商店发布的全周期流程解析
  • Linux 文件系统权限管理(补充)
  • 管理项目服务器连接数据库
  • Linux 文本处理三剑客:awk、grep、sed 完全指南
  • 中小型企业是否需要使用高防服务器
  • Linux-文本搜索工具grep