当前位置: 首页 > 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.lryc.cn/news/626814.html

相关文章:

  • 拓扑排序判断环 P1347 排序题解
  • 第二十七天:游戏组队问题
  • 跨平台 RTSP/RTMP 播放器工程化实践:低延迟与高稳定性的挑战与突破
  • Redisson最新版本(3.50.0左右)启动时提示Netty的某些类找不到
  • pip 安装常见错误及实例化解决办法大全
  • Tomcat部署与HTTP协议详解
  • 凸问题-非凸问题-非凸模型
  • 第十四届“中国软件杯”大赛晋级现场总决赛名单公布
  • PyTorch API 6
  • 单片机通信协议核心关系梳理笔记(UART/USART/232/485/SPI/12C/LIN/BLE/WIFI)
  • Spring Boot 3.4.x 性能优化实战:用 Undertow 替换 Tomcat 全指南​
  • JavaScript 性能优化实战:从原理到落地的完整指南
  • 【OneAI】使用Rust构建的轻量AI网关
  • 【Axure高保真原型】拖拉拽画圆
  • JavaScript 性能优化实战(易懂版)
  • 实验8.20
  • LeetCode 刷题【47. 全排列 II】
  • 一种融合AI与OCR的施工许可证识别技术,提升工程监管效率,实现自动化、精准化处理。
  • 【解决方案】powershell自动连接夜神adb端口
  • 深入解析RAGFlow六阶段架构
  • 结合SAT-3D,运动+饮食双重养腰新方式
  • 十二,数据结构-链表
  • Linux用30秒部署Nginx+Tomcat+Mysql+Jdk1.8环境
  • 学习嵌入式的第二十二天——数据结构——双向链表
  • 为6G和超快光谱铺路,《Nature Communications》发布新型太赫兹光芯片,实现多通道信号操纵
  • AI 效应: GPT-6,“用户真正想要的是记忆”
  • 书籍推荐|《Computational Methods for Rational Drug Design》574页
  • React响应式链路
  • CAMEL-Task1-CAMEL环境配置及你的第一个Agent
  • uniapp学习【上手篇】