单例模式
定义:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
结构图:

代码
//懒汉模式
class CSingleton
{
public:
static CSingleton* GetInstance()
{
if ( m_pInstance == NULL )
{
//先判断后加锁,防止每次调用单例都需要操作锁。
lock();
//这里双重锁定为了线程安全。
if (instance == NULL)
{
m_pInstance = new CSingleton();
}
unlock();
return m_pInstance;
}
}
private:
CSingleton(){};
//拷贝构造和【=】也私有化,防止通过这两个多实例。
CSingleton(const CSingleton &);
CSingleton& operator = (const CSingleton &);
static CSingleton * m_pInstance;
}
//饿汉模式
class CSingleton
{
public:
static CSingleton* GetInstance()
{
return m_pInstance;
}
private:
CSingleton(){};
//拷贝构造和【=】也私有化,防止通过这两个多实例。
CSingleton(const CSingleton &);
CSingleton& operator = (const CSingleton &);
static CSingleton * m_pInstance = new CSingleton();
}
使用时机:
当你需要唯一实例时,比如lib类(用于保存数据)、管理类等
优点:
1、在内存里只有一个实例,减少了内存的开销;
2、因为是唯一实例,可以用于保存数据、实现管理等。
缺点:
1、没有接口,不能继承,与单一职责原则冲突;
2、单例是极端的类,一个类应该只关注自己内部的方法实现,而不是关注外面怎么实例化。

浙公网安备 33010602011771号