英文Singleton,又称单件模式。
描述
确保类只有一个实例,并且提供了一个全局访问点。
在应用的某些场景,我们只需要类的一个实例就够了,并且我们需要在应用的多个地方(客户代码)方便的获取该实例对象。
比如应用中的一个浮动工具栏,或者是一个信息收集器(专门收集应用中的操作信息)等等。
优点
方便的控制仅唯一实例,并且入口只有Instance。
创建放在类内部管理,也避免了客户端去维护创建和生命期。
类图
实现代码
这样子,我们可以方便的通过GetInstance静态成员函数获取同一个唯一实例,然后,通过非静态方法AddInfo将操作放入到操作集合中m_vecOperInfo。
InfoCollector::GetInstance().AddInfo("hello");
InfoCollector::GetInstance().AddInfo("hi");
InfoCollector::GetInstance().AddInfo("Buy");
InfoCollector::GetInstance().PrintInfo();
#pragma once
#include <vector>
#include <string>
#include <iostream>
using namespace std;
// 信息收集助手,用于记录用户操作
class InfoCollector
{
private:
InfoCollector() {};
InfoCollector(InfoCollector& info){}
private:
vector<string> m_vecOperInfo;
public:
// 必须返回引用,内部用静态变量,避免多线程加锁问题。也不必判断指针
static InfoCollector& GetInstance()
{
static InfoCollector collector;
return collector;
}
void AddInfo(string strOper)
{
m_vecOperInfo.push_back(strOper);
}
void PrintInfo()
{
for (auto info : m_vecOperInfo)
{
cout << info << endl;
}
}
};