設計模式之——單例模式

懶漢模式

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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章