单例模式介绍
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点让程序能够访问该实例。
其应用场景通常是在多个模块中需要共享一个对象,例如日志对象、数据库连接池、配置信息等。通过单例模式可以确保这些共享对象只被创建一次,避免了资源浪费和出现意外的问题。
单例模式的实现通常通过一个静态方法(或者函数)来获取该类的唯一实例。该方法首先检查该实例是否已经被创建,如果已经创建则返回该实例,否则就创建该实例,并将其保存好以备下次调用。
代码示例
#include <iostream>
#include <map>
#include <iterator>
//#include <tracer.h>
class ConfigManager{
public:
static ConfigManager* Instance(){
static ConfigManager manager;
return &manager;
}
std::string getValue(const std::string & key) const{
std::map<std::string, std::string>::const_iterator iter;
if((iter = _kvs.find(key)) != _kvs.end()){
return iter->second;
}
return nullptr;
}
void setValue(const std::string & key, const std::string & t){
_kvs[key] = t;
}
void Display(const std::string & key){
std::map<std::string, std::string>::const_iterator iter;
if((iter = _kvs.find(key)) != _kvs.end()){
//WSA_TRACE(iter->second.c_str());
std::cout << iter->second.c_str() <<std::endl;
}
}
private:
std::map<std::string, std::string> _kvs;
};
int main(int argc, char* argv[])
{
ConfigManager::Instance()->setValue("path", "skyer/ddb");
ConfigManager::Instance()->setValue("path2", "skyer/ddb2");
ConfigManager::Instance()->Display("path2");
return 0;
}