/*********************************************************** 单例模式: 思想:保证在程序运行时,只有一个实例化的对象 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"); }