设计模式 - 单例模式
在很多场景中,你可能希望某个类只有一个实例,而且这个实例可以被整个程序共享使用。比如:配置管理器、日志记录器、数据库连接池、操作系统驱动或线程池等系统资源。单例模式(Singleton Pattern)就是为了解决这个问题。
核心思想 🌟
确保一个类在整个系统中只有一个实例,并提供一个全局访问点来获取它。
Java 实现
// 懒汉式(线程不安全)
public class Singleton {
private static Singleton instance; // 静态成员变量保存唯一实例
private Singleton() {} // 构造函数私有化
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton(); // 第一次调用时才创建实例
}
return instance;
}
}
如果你担心多线程环境下创建多个实例,可以使用双重检查锁定的线程安全写法:
// 线程安全的双重检查锁定
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
C++ 实现
// 懒汉式单例(C++11 后线程安全)
#include <iostream>
class Singleton {
private:
Singleton() {}
~Singleton() {}
Singleton(const Singleton&) = delete; // 禁用拷贝
Singleton& operator=(const Singleton&) = delete; // 禁用赋值
public:
static Singleton& getInstance() {
static Singleton instance; // 局部静态变量,第一次调用时创建,C++11 后线程安全
return instance;
}
void doSomething() {
std::cout << "Doing something...\n";
}
};