本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客
本章简要说明单例模式。本文分为**++模式说明、本质思想、实践建议、代码示例++**四个部分。
模式说明
- 方案: 单例模式确保一个类只有一个实例,并提供一个全局访问点。
- 优点: 减少内存占用,避免重复创建对象,提供全局访问点。
- 缺点: 需要业务理解,将单例改为非单例,对原有代码逻辑有影响
本质思想:通过静态方法或者全局变量确保类只有一个实例,并提供访问这个实例的全局访问点。
实践建议:c++11之后,放弃考虑所谓的饿汉、懒汉模式,在实践中已经无用了。因为c++11之后static初始化已经线程安全了,并且在第一次使用时才创建。
代码示例:
cpp
#include <iostream>
class Bird {
public:
// 静态方法获取唯一实例
static Bird* getInstance() {
static Bird instance; // 静态局部变量初始化,在C++11中是线程安全的
return &instance;
}
void fly() {
std::cout << "Bird is flying." << std::endl;
}
private:
// 将构造函数私有化
Bird() {}
};
int main() {
// 获取实例并调用方法
Bird* bird = Bird::getInstance();
bird->fly();
// 尝试再次获取实例,应该返回相同实例
Bird* anotherBird = Bird::getInstance();
if (bird == anotherBird) {
std::cout << "Both pointers point to the same instance." << std::endl;
}
// 输出:
/*
Bird is flying.
Both pointers point to the same instance.
*/
return 0;
}