C++ 設計模式-》單例模式(Singleton)

文件“F_DesignMode_Singleton.h”

#ifndef F_DESIGN_MODE_SINGLETON_20171027_KJASHD_H_
#define F_DESIGN_MODE_SINGLETON_20171027_KJASHD_H_

/*
設計模式: Singleton 單例模式

單例模式,又稱單件模式。

定義:確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。
*/

#if 1

class Singleton
{
public:
    static Singleton* GetSingletonInstance();

private:
    Singleton();
    Singleton(const Singleton* Other);
    Singleton operator= (const Singleton& Other);
    ~Singleton();

public:
    static Singleton *m_pSingleton;
};

#endif

#endif//F_DESIGN_MODE_SINGLETON_20171027_KJASHD_H_

文件“F_DesignMode_Singleton.cpp”

#include "stdafx.h"
#include "afxmt.h"
#include "F_DesignMode_Singleton.h"

CMutex g_Mutex;
Singleton* Singleton::m_pSingleton = Singleton::GetSingletonInstance();

Singleton* Singleton::GetSingletonInstance()
{
    if (m_pSingleton == NULL)
    {
        g_Mutex.Lock();
        if (m_pSingleton == NULL)
        {
            m_pSingleton = new Singleton();
        }

        g_Mutex.Unlock();
    }

    return m_pSingleton;
}

Singleton::Singleton()
{}

文件“F_DesignMode_Singleton_Test.h”

#ifndef F_DESIGN_MODE_SINGLETON_TEST_20171027_KJASHD_H_
#define F_DESIGN_MODE_SINGLETON_TEST_20171027_KJASHD_H_

#include "F_DesignMode_Singleton.h"

void F_DesignMode_Singleton_Test()
{
    Singleton *pSingletonA = Singleton::GetSingletonInstance();
    Singleton *pSingletonB = Singleton::GetSingletonInstance();


    if (pSingletonA == pSingletonB)
    {
        TRACE("pSingletonA == pSingletonB");
    }
}

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