3、单例模式(设计模式中的一种)
1) 概念:
一个类只允许存在唯一对象,并提供它的访问方法
2) 实现单例模式的方法:
–>禁止在类的外部创建对象:私有化构造函数
–>类的内部维护唯一的对象:静态成员变量(语法要求)
–>提供该类唯一对象的访问方法:静态的成员函数(只能用静态)
3) 实现方法:
–>饿汉式:无论用不用,程序启动即创建
–>懒汉式:用时即创建,不用即销毁
class A{};
#include <iostream>
using namespace std;
//饿汉式
class Singleton{
public:
//提供访问单例对象的结果
static Singleton &getInstance(void){
return s_instance;
}
void print(void)const{
cout << m_data << endl;
}
private:
//私有化构造函数
Singleton(int data):m_data(data){}
Singleton(const Singleton&);
//使用一个静态成员维护单例
static Singleton s_instance;
int m_data;
};
Singleton Singleton::s_instance(12345);
//静态成员在类的外部的全局区初始化,是语法规定。并不是在真正意义上在类的外部访问了私有成员变量。
int main(void){
Singleton::getInstance().print();
return 0;
}
#include <iostream>
using namespace std;
//懒汉式
class Singleton{
public:
//提供访问单例对象的结果,并创建对象
static Singleton &getInstance(void){
++count;
if(s_instance == NULL){
s_instance = new Singleton(12345);
}
return *s_instance;
}
//打印
void print(void)const{
cout << m_data << endl;
}
//不用时释放
//可以被多个“人”使用,应该是最后一个使用调用着release时才去释放。
void release(void){
--count;
if(count == 0){
delete s_instance;
s_instance = NULL;
}
}
//析构函数
~Singleton(void){
}
private:
//私有化构造函数
Singleton(int data):m_data(data){}
Singleton(const Singleton&);
//使用一个静态成员维护单例
static Singleton *s_instance;
//记录使用单例对象的人数
static int count;
int m_data;
};
Singleton count = 0;
Singleton *(Singleton::s_instance) = NULL;
int main(void){
Singleton::getInstance().print();
return 0;
}