设计模式──Singleton(单例模式)

            作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
       
            解析:
            Singleton 模式其实是对全局静态变量的一个取代策略,上面提到的 Singleton
            模式的两个作用在 C++中是通过如下的机制实现的:1)仅有一个实例,提供一个
            类的静态成员变量,大家知道类的静态成员变量对于一个类的所有对象而言是惟
            一的 2)提供一个访问它的全局访问点,也就是提供对应的访问这个静态成员变
            量的静态成员函数,对类的所有对象而言也是惟一的.在 C++中,可以直接使用类
            域进行访问而不必初始化一个类的对象.
            下面的实现其实是 Singleton 的一个简单实现,并不是特别的通用,一般的,如果
            一个项目中需要使用到 Singleton 模式比较多的话,那么一般会实现一个 Singl
            eton 的模板类,模板类的模板参数是需要采用 Singleton 模式的类,比如这样实
            现:
             template<typename T>
             class Singleton
               {
             //   .类的声明
             };
             // 需要采用 singleton 模式的类
             class Test
                : public Singleton<Test>
               {
             //    类的声明
             };
            但是,下面的实现还是采用最简单的实现办法,起的是演示的作用
            实现:
            1)Singleton.h
               /**************************************************************
            ******
                 created:     2006/07/20
                 filename:      Singleton.h
                 author:        李创
                           http://www.cppblog.com/converse/
                 purpose:     Singleton 模式的演示代码
             ****************************************************************
            *****/
             #ifndef SINGLETON_H
             #define SINGLETON_H
             class Singleton
               {
             public:
                    Singleton(){};
                    ~Singleton(){};
                 // 静态成员函数,提供全局访问的接口
                 static Singleton* GetInstancePtr();
                 static Singleton GetInstance();
                 void Test();
             private:
                 // 静态成员变量,提供全局惟一的一个实例
                 static Singleton* m_pStatic;
             };
             #endif
            2)Singleton.cpp
               /**************************************************************
            ******
                 created:     2006/07/20
                 filename:      Singleton.cpp
                 author:        李创
                           http://www.cppblog.com/converse/
                 purpose:     Singleton 模式的演示代码
             ****************************************************************
            *****/
             #include "Singleton.h"
             #include <iostream>
             // 类的静态成员变量要在类体外进行定义
             Singleton* Singleton::m_pStatic = NULL;
             Singleton* Singleton::GetInstancePtr()
               {
                 if (NULL == m_pStatic)
                    {
                     m_pStatic = new Singleton();
                 }
                 return m_pStatic;
             }
             Singleton Singleton::GetInstance()
               {
                 return *GetInstancePtr();
             }
             void Singleton::Test()
               {
                 std::cout << "Test!\n";
             }
            3)Main.cpp
               /**************************************************************
            ******
                 created:    2006/07/20
                 filename:     Main.cpp
                 author:       李创
                          http://www.cppblog.com/converse/
                 purpose:    Singleton 模式的测试代码
             ****************************************************************
            *****/
             #include "Singleton.h"
             #include <stdlib.h>
             int main()
               {
                 // 不用初始化类对象就可以访问了
                 Singleton::GetInstancePtr()->Test();
  Singleton::GetInstance().Test();
  system("pause");
  return 0;
}

原文地址:https://www.cnblogs.com/buffer/p/1619593.html