c++設計模式:單例模式


1.設計思想:

  單例模式,顧名思義,即一個類只有一個實例對象。C++一般的方法是將構造函數、拷貝構造函數以及賦值操作符函數聲明為private級別,從而阻止用戶實例化一個類。那么,如何才能獲得該類的對象呢?這時,需要類提供一個public&static的方法,通過該方法獲得這個類唯一的一個實例化對象。這就是單例模式基本的一個思想。

2.分類:

  1).懶漢式:用的時候才加載,在類的public,getInstance方法中創建對象,場景就是可能有不用的情況,需要通過手動加鎖實現線程安全。

  2).餓漢式:該實例對象需要存儲在內存的全局數據區,故使用static修飾,程序開始時,全局變量就會初始化。場景就是肯定會實例化,本身就是線程安全。

 1.經典懶漢模式:(new)

class singleton
{
protected:
    singleton()
    {
        pthread_mutex_init(&mutex);
    }
private:
    static singleton* p;
public:
    static pthread_mutex_t mutex;
    static singleton* initance();
};

pthread_mutex_t singleton::mutex;
singleton* singleton::p = NULL;
singleton* singleton::initance()
{
    if (p == NULL)
    {
        pthread_mutex_lock(&mutex);
        if (p == NULL)
            p = new singleton();
        pthread_mutex_unlock(&mutex);
    }
    return p;
}

2.懶漢模式(靜態變量)

class singleton
{
protected:
    singleton()
    {
        pthread_mutex_init(&mutex);
    }
public:
    static pthread_mutex_t mutex;
    static singleton* initance();
    int a;
};

pthread_mutex_t singleton::mutex;
singleton* singleton::initance()
{
    pthread_mutex_lock(&mutex);
    static singleton obj;
    pthread_mutex_unlock(&mutex);
    return &obj;
}

3.餓漢模式

class singleton
{
protected:
    singleton()
    {}
private:
    static singleton* p;
public:
    static singleton* initance();
};
singleton* singleton::p = new singleton;
singleton* singleton::initance()
{
    return p;
}

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM