懶漢模式
singleton.h
//懶漢模式
class Singleton
{
protected:
Singleton()
{
}
private:
static Singleton* p;
static QMutex m_mutex;
public:
static Singleton* getInstance()
{
if (p == NULL)
{
m_mutex.lock();
if (p == NULL)
p = new Singleton();
m_mutex.unlock();
}
return p;
}
};
QMutex Singleton::m_mutex;
Singleton* Singleton::p = NULL;
餓漢模式
singleton.h
//餓漢模式
class Singleton
{
private:
Singleton()
{
m_count++;
}
static Singleton* m_single;
public:
static Singleton *getInstance()
{
return m_single;
}
static int m_count;
};
Singleton *Singleton::m_single = new Singleton();
int Singleton::m_count = 0;
main.cpp
#include <QApplication>
#include "singleton.h"
#include <QtDebug>
//單例模式
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Singleton *single = Singleton::getInstance();
Singleton *single1 = Singleton::getInstance();
if(single == single1)
{
qDebug() << "地址相同";
}
qDebug() << single1->m_count;
return a.exec();
}
單例模式:程序運行過程中,只創建一個實例
UML