单例模式(Singleton Pattern)
# 单例模式(Singleton Pattern)
# 概念
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点以访问该实例。
# 思想
单例模式的思想是通过限制类的实例化过程,确保在运行时只存在一个该类的实例。这样可以方便地共享实例,并且确保在整个应用程序中只有一个实例被使用。
# 角色
- Singleton(单例):定义一个静态方法或者静态成员变量来获取该类的唯一实例。
- Client(客户端):使用Singleton类的对象实例。
# 优点
- 提供了对唯一实例的控制和管理,确保在整个应用程序中只有一个实例存在。
- 全局访问点使得单例实例可以被轻松地访问。
# 缺点
- 单例模式在多线程环境下需要注意线程安全问题。
- 单例模式可能导致代码的耦合度增加,因为它引入了全局状态。
# 类图
@startuml
class Singleton {
- static instance: Singleton
- constructor Singleton()
+ static getInstance(): Singleton
+ operation(): void
}
note top of Singleton: 单例类
note right of Singleton::getInstance
返回单例实例
end note
Client --> Singleton::getInstance
Client --> Singleton::operation
@enduml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 时序图
@startuml
Client -> Singleton: getInstance()
activate Singleton
Singleton -> Singleton: 创建实例
Singleton --> Client: 返回实例
deactivate Singleton
Client -> Singleton: operation()
activate Singleton
Singleton --> Client: 执行操作
deactivate Singleton
@enduml
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 示例代码
#include <iostream>
class Singleton {
private:
static Singleton* instance;
Singleton() {}
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
void operation() {
std::cout << "Executing operation" << std::endl;
}
};
Singleton* Singleton::instance = nullptr;
int main() {
Singleton* singleton = Singleton::getInstance();
singleton->operation();
return 0;
}
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
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
示例代码中定义了一个名为Singleton的类,其中包含一个静态成员变量instance
来保存唯一实例的引用。通过静态方法getInstance()
,可以获取该类的唯一实例。在示例代码的主函数中,首先获取了Singleton的实例,然后调用了operation()
方法执行操作。
示例代码的运行结果:
Executing operation
1
示例代码首先获取Singleton的实例,然后调用operation()
方法打印出"Executing operation"。这证明在整个应用程序中只有一个Singleton的实例,并且可以通过全局访问点进行访问。
编辑 (opens new window)
上次更新: 2023/06/09, 13:17:31
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(三)--- Linux kernel移植02-05