/***********************************************************
单例模式:
思想:保证在程序运行时,只有一个实例化的对象
1.懒汉式
1.只有在使用的时候才去实例化对象,在用不到的时候不去创建
2.首先构造函数私有化,通过静态成员函数赋予外界调用的权限
静态成员变量在类内定义,在类外初始化
3.通过静态成员指针变量来判断对象是否创建
2.饿汉式
1.与懒汉式的区别是,静态成员变量在初始化时,就将对象创建出来
2.通过静态成员函数获得此对象,在获得该实例时,直接返回此对象
**********************************************************/
/*********************************************************
1.单例模式-----懒汉式
**********************************************************/
#include <iostream>
using namespace std;
class Singelton//懒汉式
{
private:
Singelton(){
cout << "单例对象:构造函数" << endl;
}
public:
static Singelton *getInstance()
{
if (m_singer == NULL)
{
m_singer = new Singelton;
}
return m_singer;
}
private:
static Singelton *m_singer;
};
Singelton *Singelton::m_singer = NULL;//懒汉式 并没有创建单例对象
void main()
{
cout << "演示 懒汉式" << endl;
Singelton *p1 = Singelton::getInstance();
Singelton *p2 = Singelton::getInstance();
if (p1 != p2)
{
cout << "不是同一个对象" << endl;
}
else
{
cout << "是同一个对象" << endl;
}
system("pause");
}
/*********************************************************
2.单例模式-----饿汉式
**********************************************************/
class Singelton2
{
private:
Singelton2()
{
m_singer = NULL;
cout << "俄汉式:构造函数" << endl;
}
public:
static Singelton2 *getInstance()
{
return m_singer;
}
private:
static Singelton2 *m_singer;
};
Singelton2 *Singelton2::m_singer = new Singelton2();//饿汉式 在初始化时,直接创建该对象
void main()
{
cout << "演示 饿汉式" << endl;
Singelton2 *p1 = Singelton2::getInstance();
Singelton2 *p2 = Singelton2::getInstance();
if (p1 != p2)
{
cout << "不是同一个对象" << endl;
}
else
{
cout << "是同一个对象" << endl;
}
system("pause");
}