单例模式
保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。
必须满足三个条件:某个类只能有一个实例、它必须自行创建这个实例、它必须自行向整个系统提供这个实例。
Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供
一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例;为了防止
在外部对其实例化,将其构造函数设计为私有;在单例类内部定义了一个
Singleton类型的静态对象,作为外部共享的唯一实例。
单例模式的使用步骤:
a) 构造函数私有化。
b) 提供一个全局的静态方法(全局访问点)来获取单例对象。
c) 在类中定义一个静态指针,指向本类的变量的静态变量指针 。
#include <iostream>
using namespace std;
/*懒汉模式*/
class Singelton
{
public:
/*
对外提供⼀个全局的静态⽅法
*/
static Singelton* getInstance() {
/*
懒汉式: 在调⽤全局静态⽅法,获取单例的时候,
再进⾏创建。懒汉式的单例创建在程序的执⾏中进⾏。
*/
if (instance == NULL) {
instance = new Singelton;
}
m_count++;
return instance;
}
int getCount() {
return m_count;
}
private:
/*
构造函数私有化
*/
Singelton() {
instance = NULL;
m_count = 0;
cout << "构造函数 singelton() 执⾏" << endl;
}
/*
在类中定义⼀个静态指针,指向本类的变量的静态变量指针
*/
static Singelton *instance;
static int m_count;
};
/*
对静态变量的初始化,要放在类的外部,
即,放在全局位置上。
*/
Singelton * Singelton::instance = NULL;
int Singelton::m_count = 0;
/*
饿汉模式
*/
class Singelton2 {
public:
static Singelton2* getInstance() {
m_count++;
return instance;
}
int getCount() {
return m_count;
}
private:
Singelton2() {
instance = NULL;
m_count = 0;
}
static Singelton2 * instance;
static int m_count;
};
/*
饿汉式的不是在全局静态⽅法中创建,
⽽是不管你创不创建实例,我在声明的
时候就创建出来,
饿汉式的单例,是在编译的时候就已经创建好了。
*/
Singelton2 * Singelton2::instance = new Singelton2;
int Singelton2::m_count = 0;
未完待续。。。