单例模式Singleton – 学习HeadFirst设计模式记录

 

单件模式:确保一个类只有一个实例,并提供一个全局访问点。

 

1、单例模式实现

  
#include <windows.h>
#include <assert.h>
#include <iostream>

/*
  单件模式:确保一个类只有一个实例,并提供一个全局访问点。
*/

class Singleton
{
public:
     static Singleton* GetInstance()   /*  单例全局访问点  */
    {
         if (NULL == _pUniqueInstance)  /*  延迟初始化。若使用立刻创建方式,就不会有多线程问题,但是程序启动后就会占用资源。  */
        {
            CRITICAL_SECTION cs;              /*  防止多线程冲突  */
            InitializeCriticalSection(&cs);
            EnterCriticalSection(&cs);
             if (NULL == _pUniqueInstance)
            {
                _pUniqueInstance =  new Singleton();
            }
            LeaveCriticalSection(&cs);
            DeleteCriticalSection(&cs);
        }

         return _pUniqueInstance;
    }

private:
    Singleton() {}   /*  构造器必须为私有的  */

private:
     static Singleton *_pUniqueInstance;
};

Singleton *Singleton::_pUniqueInstance = NULL;   /*  初始化类static变量  */


2、测试代码

int main()
{
    std::cout<< " Singleton Patten. "<<std::endl<<std::endl;

    assert(Singleton::GetInstance() == Singleton::GetInstance());
    std::cout<< " 单例指针: "<<Singleton::GetInstance()<<std::endl<<std::endl;

     return  0;
}

 


你可能感兴趣的:(Singleton)