1.概念
2.为什么使用单例模式?
3.实现单例模式的常用步骤
单例模式是一种对象创建模式,使用单例模式,可以保证一个类只生成唯一的实例对象。也就是说,在整个程序空
间中,该类只存在一个实例对象。
GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能够对该实例加以访问的全局访问方法。
2.为什么使用单例模式?
在应用系统开发中,我们常常有以下需求:
-在多线程之间,比如初始化一次socket资源。比如,servlet环境,共享同一个资源或者操作同 一个对象;-在整个程序空间中使用全局变量,共享资源;
-大规模系统中,为了性能的考虑,需要节省对象的创建时间等。因为Singleton模式可以保证为了一个类只生成唯一的实例对象,所以这种情况,Singleton模式就派上用场。
3.实现单例模式的常用步骤
a) 构造函数私有化;
b) 提供一个全局静态方法(全局访问点);
c) 在类中定义一个静态指针,指向本类的变量的静态变量指针。
4.懒汉式单例和饿汉式式单例,本文先实例懒汉式代码。
懒汉式:
#include <iostream>
using namespace std;
class Singleton
{
private:
Singleton()
{
m_singler = NULL;
m_count = 0;
cout << "构造函数 Singlton...do" << endl;
}
public:
static Singleton *getInstance()
{
if(m_sigler == NULL) //懒汉式:1.每次获取实例都要判断;2.多线程会有问题。
{
m_singler = new Singleton;
}
return m_singler;
}
static void printT()
{
cout << "m_count:" << m_count << endl;
}
private:
static Singleton *m_singler;
static int m_count;
};
Singleton *Singleton::m_siger = NULL;//懒汉式没有创建单例对象
int Singleton::m_count = 0;
void main()
{
cout << "懒汉式" << endl;
Singleton *p1 = Singleton::getInstance();//只有在使用时,才会创建对象
Singleton *p2 = Singleton::getInstance();
if(p1 != p2)
{
cout << "不是同一个对象" << endl;
}
else
{
cout << "是同一个对象" << endl;
}
p1->printT();
p2->printT();
return;
}
注意,懒汉式只有在调用函数getInstance的时候才会创建对象。