单例模式:
某个类只能生成一个实例,该类提供了一个全局访问点提供给外部获取该实例,目的是节约内存资源,保证数据内容一致性,堆某些类要求只能创建一个实例。
实现方式:
普通类的构造函数是公有的(public),外部类可以通过**new 构造函数()**来生成多个实例。但是,假设把类的构造函数设为私有的(private),外部类就不能调用该构造函数,也就不能生成多个实例。因此该类自身必须定义一个静态私有实例,且向外提供一个静态的公有函数(public)用于创建或者获取该静态私有实例。
函数代码
第一步:类函数定义
#pragma once
#include <iostream>
#include <mutex>
using namespace std;
std::mutex mt;
class President
{
private:
//静态创建私有实例,避免类在外部实例化
static President *instance;
President(){}
public:
//在方法上加上同步
static President *getInstance();
void getname();
};
第二步:类函数实现
//在此处初始化
President *President::instance=new President();
President();
President *President::getinstance()
{
mt.lock();
if(instance==NULL)
{
instance=new President();
}
else
{
cout<<"已经有一个总体,不能产生新的总统!"<<endl;
}
mt.unlock();
return instance;
}
void President::getName()
{
cout<<"我是美国总统!"<<endl;
}
第三步:主函数实现
int main()
{
President *p1=President::getInstance();
//p1->getInstance();
p1->getName();
President *p2=President::getInstance();
//p2->getInstance();
p2->getname();
if(p1==p2)
{
cout<<"他们是同一个人"<<endl;
}
else
{
cout<<"他们不是同一个人"<<endl;
}
}
总结:
**单例模式是指程序只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例。**例如:
1.设备管理器,系统中可能有多个设备管理器,用于管理设备驱动。
2.数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取。
3.一台电脑的两台打印机不能同时打印同一个文件。