什么是单例模式
一个类只能创建一个对象,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,使得系统中只有唯一的一个对象实例。该实例被所有程序模块共享。
单例模式的应用
缓存,日志,工具类,配置,线程池
- 资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。
- 控制资源的情况下,方便资源之间的互相通信。如线程池等。
单例模式的优缺点
优点:
- 避免对共享资源的多重占用。
- 由于在系统内存中只存在一个对象,因此可以节省内存,加快对象访问速度
- 提供了对唯一实例的受控访问。
缺点
不适用于变化的对象。如果同一类型的对象总是要在不同的场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。
单例模式的实现
C++实现单例模式的一般方法是将构造函数,拷贝构造函数以及赋值运算符函数声明成private,从而禁止他人创建实例。如果上面三者不为私有,那么他人就可以调用上面的三个函数来创建实例,就没法实现单例模式。但是我们总归是要创建一个类的,我们可以提供一个public的静态方法来帮助我们获得这个类唯一的一个实例化对象。
单例模式一般有两种实现模式:懒汉模式和饿汉模式
饿汉模式:定义的是静态成员对象变量,程序启动就创建对象实例,
懒汉模式:定义的是静态成员对象指针变量,要用对象才创建该对象实例。
懒汉模式
像一个懒汉一样,需要创建实例的时候程序再去创建,不需要创建实例的时候程序就“懒得”去创建。这是一种时间换空间的做法
#include <iostream>
using namespace std;
class Singleton
{
private:
Singleton(){
cout << "构造函数" << endl; }