首页 > 代码库 > 设计模式之Singleton

设计模式之Singleton

 

Singleton 解决的问题:

         一个类只允许产生一个对象。一般如果系统有许多部分组成,而每一个部分只希望被创建一次(一个实例),或者 工程中需要一些全局共享的数据,这些数据可以被封装在一个类里面,这个类也只允许创建一个对象(实际项目中可能还要考虑数据的同步问题,本文不考虑,一次只解决一个问题)。

Singleton 实现过程:

      1. 私有化类的构造函数。

      2. 添加一个指向这个类的静态指针 。

      2. 添加静态函数 (创建这个类的唯一对象,并且将这个对象的地址赋予静态指针)。

Code Implement   

#include "stdafx.h"#include <iostream>#include <string>using namespace std;class Singleton{private:    Singleton(){};public:    static Singleton *m_pSingleton;public:    static Singleton* Create()    {        if(NULL == m_pSingleton)            m_pSingleton = new Singleton();        return m_pSingleton;    }public:    static void Delete()    {        if(NULL!= m_pSingleton)        {            delete m_pSingleton;            m_pSingleton = NULL;        }    }public:    string m_ObjectName;public:    void SetObjectName(string name)    {        m_ObjectName = name;    }    string GetObjectName()    {        return m_ObjectName;    }};Singleton* Singleton::m_pSingleton = NULL;int _tmain(int argc, _TCHAR* argv[]){    //Singleton object1; // Fail to create object    Singleton *pObject1 = Singleton::Create ();   string name =string("object1");   pObject1->SetObjectName(name);   cout<<"Cur object name is : "<< pObject1->GetObjectName()<<endl;
Singleton
*pObject2 = Singleton::Create (); cout<<"Cur object name is : "<< pObject2->GetObjectName()<<endl;

     pObject1->Delete();
     pObject2->Delete();

   return 0;
}

Result:

 

Renark: 本文不考虑数据的同步性问题,一旦使用singleton 要使用内核对象等方法对数据同步(多线程 分布式等情况下)。

                                                                                               一次只解决一个问题