单例模式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;
}


原文地址:https://www.cnblogs.com/ant-wjf/p/4556982.html