题目:设计一个类,我们只能生成该类的一个实例。
什么是单例模式:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
应用场景:全局类,如配置类,计数器等
2. 思路: 既然只能有一个实例,那我这个类里的构造函数就不能被随便调用了,那我就把构造函数写成私有的,这样别人就不能调用了,那我就用一个static 实例化一个实例,然后返回这个static实例。
3. 考虑的问题
一个实例,整个系统使用,那线程同步问题就必须要考虑了。
为了解决这个问题:懒汉模式、饿懒汉模式、Meyers Singleton(目前最推荐的C++单例写法)
//Meyers Singleton(目前最推荐的C++单例写法)
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton& Instance()
{
static Singleton theSingleton;
return theSingleton;
}
void doSomeThong();
private:
Singleton();
~Singleton();
};
Singleton::Singleton()
{
}
Singleton::~Singleton()
{
}
void Singleton::doSomeThong()
{
cout << "单例类" << endl;
cout << "C++最推荐的单例类写法" << endl;
}
int main()
{
Singleton::Instance().doSomeThong();
return 0;
}
5、优点
①由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁创建销毁时。
②减少系统性能开销
③避免对资源的多重占用
④单例模式可以在系统设置全局访问点,优化和共享资源访问
6、缺点
①单例模式一般没有接口,很难扩展,扩展基本必须修改源代码
②对测试不友好,需要解决在并发中的问题
③单例模式与单一职责原则有冲突