单例模式是创建型设计模式,即用于创建对象的设计。其能够保证当前系统仅存在一个实例,并提供获取该实例的接口供客户端使用。(即创建对象禁止使用new,而是通过类的接口返回一个已经存在的对象。当强行new操作时,编译报错)
单例模式的实现较为简单,部分专家并不认为其是一种设计,而是一种编程技巧。
既然存在单例模式,那么其存在的意义是什么呢?又或者说能解决什么问题?
在上述介绍中,已经大致描述了单例的特点:
类图 单例模式
代码
#include <iostream>
#include <unistd.h>
#include <thread>
using namespace std;
class CSingleton
{
public:
~CSingleton() {}
static CSingleton *getInstance(string value);
string getValue()
{
return mValue;
}
private:
CSingleton(const string value): mValue(value)
{
}
string mValue;
};
CSingleton* CSingleton::getInstance(string value)
{
static CSingleton mObj(value);
return &mObj;
}
void threadFirst()
{
CSingleton* pSingleton = CSingleton::getInstance("first");
cout << pSingleton->getValue() << "\n";
}
void threadSecond()
{
CSingleton* pSingleton = CSingleton::getInstance("second");
cout << pSingleton->getValue() << "\n";
}
void threadThird()
{
CSingleton* pSingleton = CSingleton::getInstance("third");
cout << pSingleton->getValue() << "\n";
}
int main(int argc, char *argv[])
{
thread t1(threadFirst);
thread t2(threadSecond);
thread t3(threadThird);
t1.join();
t2.join();
t3.join();
return 0;
}
输出:
third
third
third
在三个子线程创建实例时,分别向构造函数传入了"first"、"second"、"third",实际输出时都是"third"。说明三个线程使用的都为同一个实例。
单例模式目前使用的较为流行,其实现方法也比较简单。当遇到需要管理公共资源时,可以采用单例模式。