设计模式之Singleton模式

单例模式是一种创建型设计模式,它确保类只有一个实例,并提供全局访问点。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}

void doSomething() {
cout<<"singleton"<<endl;
}

private:
Singleton() {} // 私有构造函数
Singleton(const Singleton&) = delete; // 禁止拷贝构造函数
Singleton& operator=(const Singleton&) = delete; // 禁止赋值运算符

// 静态成员变量
static Singleton* instance;
};

Singleton* Singleton::instance = nullptr;

int main() {
Singleton& s1 = Singleton::getInstance();
Singleton& s2 = Singleton::getInstance();

assert(&s1 == &s2); // 两个实例应该是同一个对象

s1.doSomething();
s2.doSomething();

return 0;
}

在上面的示例中,Singleton类的构造函数是私有的,这意味着只有getInstance()方法可以创建Singleton对象。getInstance()方法使用静态成员变量instance来存储唯一的实例,并在需要时创建它。由于静态成员变量只会在第一次使用时初始化,因此这种方法可以确保只有一个实例。