单例模式
1.定义一个单例类,其构造函数是私有的,
2.使用类的私有静态指针变量指向类的唯一实例,
3.并用一个公有的静态方法来获取该实例。
单例模式的作用就是保证在整个应用程序的生命周期中的任何一个时刻,单例类的实例都只存在一个(也可以不存在)。
单例模式通过类本身来管理其唯一的实例,唯一的实例是类的一个普通对象,但设计这个类时,让它只能创建一个实例并提供对此实例的全局访问。
下面是一个单例类的实现:
1 #include<iostream> 2 using namespace std; 3 class CSingleton{ 4 private: 5 CSingleton(){ //构造函数是私有的 6 } 7 static CSingleton *m_pInstance; //私有的静态数据成员 8 public: 9 static CSingleton * GetInstance(){ //静态成员函数,判断是否第一次调用 10 if (m_pInstance == NULL) 11 m_pInstance = new CSingleton(); 12 return m_pInstance; 13 } 14 }; 15 CSingleton * CSingleton::m_pInstance = NULL; //初始化静态数据成员 16 int main(){ 17 CSingleton *s1 = CSingleton::GetInstance(); 18 CSingleton *s2 = CSingleton::GetInstance(); 19 if (s1 == s2){ 20 cout << "s1 = s2" << endl; 21 } 22 return 0; 23 }
这里用户访问实例的唯一方法只有GetInstance()成员函数。如果不通过这个函数,任何创建实例的尝试都会失败,因为类的构造函数是私有的。GetInstance() 的返回值是当这个函数首次被访问时创建的,后面再次调用GetInstance()都返回相同实例的指针。
单例类CSingleton有以下特征:①有一个指向唯一实例的静态指针m_pInstance,并且是私有的;②有一个公有的函数,可以获取这个唯一的实例,并且在需要的时候创建该实例;③其构造函数是私有的,这样就不能从别处创建该类的实例。