单例模式
英文: Singleton pattern.
别名: 单例模式/单件模式.
描述
确保一个类只有一个实例, 并提供一个全局指针用于访问实例.
优点
- 初始化顺序可控的全局变量. 全局变量初始化顺序不可控, 因此有全局变量的类的构造函数中不应该访问全局变量, 因为它们可能还未被初始化. (适用于 C++)
缺点
- 是全局变量, 可能提高代码耦合度.
- 并发不友好, 可能同时被多个线程读取和修改.
提示
- 可以被继承.
- 若初始化时间较长, 为避免性能问题, 可以提前初始化.
实现
- 第一次获取实例时初始化, 被称为
懒汉式
.
初始化顺序可控, C++11及之后线程安全, C++11之前线程不安全.
出处: 该方法由 Scott Meyer 在 Effective C++ 一书中提出.
class Singleton
{
public:
Singleton(const Singleton&) = delete;
Singleton operator=(const Singleton&) = delete;
static Singleton& get()
{
static Singleton instance;
return instance;
}
private:
Singleton() = default;
};
- 作为全局变量初始化, 被称为
饿汉式
.
初始化顺序不可控, 线程安全.
class Singleton
{
public:
static Singleton& get()
{
return *instance;
}
private:
Singleton() = default;
static Singleton *instance;
};
Singleton* Singleton::instance = new Singleton();