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

设计模式-单列模式

一、什么是单例模式?

单例模式(Singleton Pattern)保证:

  1. 类只有一个实例
  2. 并提供一个对该实例的全局访问方式

适用场景:

  • 需要全局唯一对象
  • 资源消耗大,不适合频繁创建
    如:日志系统、配置管理、数据库连接管理等

二、为什么要使用单例模式?

如果一个类在系统中被多次实例化,可能会带来问题:

使用单例模式,可以:

  • 保证唯一实例,节省资源
  • 全局访问方便
  • 控制初始化与生命周期
  • 避免多对象修改导致的状态不一致

若不使用单例:

  • 可能生成多个实例
  • 资源浪费
  • 状态难同步

三、现实生活类比 🏢

电梯调度系统:

整栋楼只有一个电梯调度中心
所有电梯请求都由它集中管理
类似“全局唯一对象”

它必须单例,否则多个调度中心会互相冲突。


四、代码示例

不使用单例模式

#include <iostream>
using namespace std;class Logger {
public:void log(const string& message) {cout << "[Log] " << message << endl;}
};int main(){Logger logger1;Logger logger2;logger1.log("Hello");logger2.log("World");
}

使用单例模式

#include <iostream>
#include <mutex>
using namespace std;class Logger {
private:Logger() {}                    // 构造函数私有Logger(const Logger&) = delete; // 禁止拷贝Logger& operator=(const Logger&) = delete;static Logger* instance;static mutex mtx;public:static Logger* getInstance() {if (instance == nullptr) {lock_guard<mutex> lock(mtx);if (instance == nullptr) {instance = new Logger();}}return instance;}void log(const string& msg) {cout << "[Log] " << msg << endl;}
};Logger* Logger::instance = nullptr;
mutex Logger::mtx;int main() {Logger* logger = Logger::getInstance();logger->log("Singleton Hello");
}
http://www.dtcms.com/a/560983.html

相关文章:

  • ArgoCD与Helm:云原生部署对比解析
  • 我的创作纪念日:从 2024.11.02 到今天的一整年
  • go语言 做网站外贸导向企业网站
  • 十堰微网站建设电话计算机哪个专业最吃香而且最简单
  • OpenCV(十六):椭圆的绘制
  • 数据仓库·简介(一)
  • 如何细分行业 做网站赚钱品质培训网站建设
  • 网站建设 思路室内设计平面图包括
  • 【软件安全】Web Security(Cookies / Session / XSS / SQL Injection / CSRF)概念介绍
  • 【踩坑篇】MyBatis-Plus拦截 ResultSetHandler.handleResultSets返回结果为空List
  • SSM框架高频考点
  • Chart.js 气泡图
  • C4D R21文字挤压的封盖变化详解
  • 网站咨询弹窗是怎么做的视频教做家常菜的网站
  • 网站备案 图标jsp网站开发框架
  • 网站翻页模板wordpress 点击导航链接老是跳转到当前页面
  • 计算机毕业设计java和Vue的在线购物系统 电商平台管理系统 网上购物平台
  • C++ string(四):编码
  • enumerate
  • C++ 多线程同步机制详解
  • EMB电子机械制动器夹紧力分析
  • 计算机操作系统:缓冲区管理
  • 绥化市建设工程网站招投标网站 服务器 域名
  • Altium23批量将元器件的摆放角度恢复正常
  • 陇西网站建设 室内设计网站有pc站和手机站
  • 因果推理算法及工具应用
  • 安卓接入Twitter三方登录
  • CICD工具,Jenkins or Tekton or Arbess一文全面对比评测
  • 高水平的徐州网站建设做好网站内能另外做链接吗
  • 图神经网络分享系列-GAT(GRAPH ATTENTION NETWORKS) (三)