📖 什么是单例模式
1. 生活中的例子
想象一个公司的 CEO:
整个公司 → [唯一的 CEO] → 所有员工 (单例) 都向同一个 CEO 汇报
关键点:
- 一个公司只有一个 CEO
- 所有人访问的都是同一个 CEO
- CEO 在公司成立时就确定,不会随意更换
2. 程序中的定义
单例模式(Singleton Pattern) 是一种创建型设计模式:
全局访问点 → [唯一实例] → 所有调用者 getInstance() 单例对象 共享同一个对象
核心要素:
- 私有构造函数:防止外部创建实例
- 私有静态实例:保存唯一的对象
- 公有静态方法:提供全局访问点
- 禁止拷贝和赋值:确保唯一性
3. 模式结构图
调用者通过 getInstance() 获取 Singleton 实例。
🎯 为什么需要这个模式
官方定义
根据 GoF(Gang of Four)《设计模式》原书的定义:
Intent: 'Ensure a class has only one instance, and provide a global point of access to it.'
(确保一个类只有一个实例,并提供一个全局访问点)
核心动机:
'The most common reason for this is to control access to some shared resource — for example, a database or a file.'
(最常见的原因是控制对共享资源的访问——例如数据库或文件)
问题场景
生活中的例子:打印机
办公室场景:一台打印机,多个员工。如果没有统一管理,打印内容混乱、卡纸、冲突。
❌ 没有单例模式
// 多个打印管理器实例,导致打印任务混乱
class PrinterSpooler {
public:
void addJob(const std::string& document) {
jobQueue_.push(document);
}
void processJobs() {
while (!jobQueue_.empty()) {
std::cout << << jobQueue_.() << std::endl;
jobQueue_.();
}
}
:
std::queue<std::string> jobQueue_;
};
{
PrinterSpooler spooler1;
PrinterSpooler spooler2;
PrinterSpooler spooler3;
spooler();
spooler();
spooler();
}


