![48b1207ff1246ef95307e145bfb16b09.png](https://i-blog.csdnimg.cn/blog_migrate/6c26422f608f08d684d501450758486b.jpeg)
单例模式
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这样在内存中只会创建一次对象,让所有需要调用的函数都共享这个单例对象。
编写单例模式代码时注意事项:
- 把构造函数放在
private
中,禁止拷贝构造函数。 static A a;
在C++11标准中,要求局部静态变量初始化具有线程安全性。- 放到
getInstance()
延迟初始化。静态局部变量在程序执行到该对象的声明处时被首次初始化,之后的函数调用不再进行初始化。始终驻留在全局/静态区,直到程序运行结束,但其作用域为局部作用域。
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
void setup();
private:
Singleton();
Singleton(const Singleton& rhs) = delete;
Singleton& operator=(const Singleton& rhs) = delete;
};
// 如有有一批有业务上下游关系的单例类型,在init()中初始化保证单例对象创建的顺序
void init() {
}
// Singleton::getInstance().setup();
常见用途:被很多类调用的通用计算模块,这个模块内部维护自己的状态,之后依据入参计算结果并返回,这个模块就可以设计为单例。
工厂模式
工厂模式属于创建模式,本质上抽象了创建对象的过程。对外提供接口来指向新创建的对象,但创建过程比较复杂,不会暴露创建逻辑。在C++中,利用多态和泛型,通过工厂类创建子类对象对外提供。
参考 工厂模式(factory Method)的本质是什么?为什么引入工厂模式?