标签:style blog http color 使用 strong
一个类只允许产生一个对象。一般如果系统有许多部分组成,而每一个部分只希望被创建一次(一个实例),或者 工程中需要一些全局共享的数据,这些数据可以被封装在一个类里面,这个类也只允许创建一个对象(实际项目中可能还要考虑数据的同步问题,本文不考虑,一次只解决一个问题)。
1. 私有化类的构造函数。
2. 添加一个指向这个类的静态指针 。
2. 添加静态函数 (创建这个类的唯一对象,并且将这个对象的地址赋予静态指针)。
#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 要使用内核对象等方法对数据同步(多线程 分布式等情况下)。
一次只解决一个问题
标签:style blog http color 使用 strong
原文地址:http://www.cnblogs.com/bkycode/p/3815200.html