1、定义与概念
单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。就像是在一个软件系统中,某些资源或者对象只需要存在一个就可以满足系统的需求,比如系统的配置管理器、数据库连接池等。通过单例模式,可以避免创建多个实例导致的资源浪费、数据不一致等问题。
2、实现方式
a、懒汉式单例(线程不安全)
- 代码示例(C++)
class Singleton {
private:
static Singleton* instance;
Singleton() {}
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
- 分析
这种方式在首次调用 getInstance
方法时才创建实例。但是在多线程环境下是不安全的,因为多个线程可能同时判断 instance
为 nullptr
,然后都创建一个新的实例,这就违背了单例模式的初衷。
b、懒汉式单例(线程安全)
- 代码示例(C++)
class Singleton {
private:
static Singleton* instance;
static std::mutex mutex_;
Singleton() {}
public:
static Singleton* getInstance() {
std::lock_guard<std::mutex> guard(mutex_);
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::