C++ 工厂模式示例单例问题?
我开始创建一个工厂模式示例。我的目标是不必更改工厂代码。当我添加新的派生类时,它们将自动在工厂中工作。以下是我为注册系统提出的建议。它使用单体工厂。 他们使用单件工厂会失败吗?C++ 工厂模式示例单例问题?,c++,factory,C++,Factory,我开始创建一个工厂模式示例。我的目标是不必更改工厂代码。当我添加新的派生类时,它们将自动在工厂中工作。以下是我为注册系统提出的建议。它使用单体工厂。 他们使用单件工厂会失败吗? 我计划在一些RPC服务器代码中使用它 #include <string> #include <iostream> #include <stdexcept> #include <map> #include <memory> namespace configNM{
我计划在一些RPC服务器代码中使用它
#include <string>
#include <iostream>
#include <stdexcept>
#include <map>
#include <memory>
namespace configNM{
class config{
public:
config(const std::string & filename);
config(){};
std::string getConfFileName()const{return _confFilename;};
private:
std::string _confFilename;
protected:
};
class configColumnHeaders:public config{
private:
static bool registered;
configColumnHeaders(){};
configColumnHeaders(const std::string & filename):config(filename){std::cout << "configColumnHeaders" << std::endl;};
protected:
public:
static std::unique_ptr<config> create(std::string in){
std::cout << "creating configColumnHeaders" << std::endl;
std::unique_ptr<configColumnHeaders> MyPtr(new configColumnHeaders(in));
return std::move(MyPtr);
};
};
class configColumnsNoHeaders:public config{
private:
configColumnsNoHeaders(){};
configColumnsNoHeaders(const std::string & filename):config(filename){std::cout << "configColumnsNoHeaders" << std::endl;};
static bool registered;
protected:
public:
static std::unique_ptr<config> create(std::string in){
std::unique_ptr<configColumnsNoHeaders> MyPtr(new configColumnsNoHeaders(in));
return std::move(MyPtr);
};
};
class configFixed:public config{
private:
configFixed(){};
configFixed(const std::string & filename):config(filename){std::cout << "configFixed" << std::endl;};
static bool registered;
protected:
static std::unique_ptr<config> create(std::string in){
std::unique_ptr<configFixed> MyPtr(new configFixed(in));
return std::move(MyPtr);
};
public:
};
class configFactory{
public:
typedef std::unique_ptr<config> (*configCreateFunction)(std::string);
std::map<std::string,configCreateFunction> registeredConfigs;
static configFactory* instance(){
static configFactory factory;
return &factory;
}
bool registerConfig(const std::string & name,std::unique_ptr<config> (createFunction)(std::string)){
registeredConfigs.insert(std::make_pair(name,createFunction));
return true;
}
std::unique_ptr<config> createConfig(const std::string& name, std::string filename)
{
return registeredConfigs[name](filename);
}
};
}
using namespace configNM;
config::config(const std::string & filename){
_confFilename=filename;
}
bool configColumnHeaders::registered = configFactory::instance()->registerConfig("column_headers", configColumnHeaders::create);
bool configColumnsNoHeaders::registered = configFactory::instance()->registerConfig("columns_no_headers", configColumnsNoHeaders::create);
bool configFixed::registered = configFactory::instance()->registerConfig("fixed", configFixed::create);
int main(void){
config myConfig("columnHeaders.json");
auto myPtr = configFactory::instance()->createConfig("column_headers","parameter");
auto myPtr2 = configFactory::instance()->createConfig("columns_no_headers","parameter");
auto myPtr3 = configFactory::instance()->createConfig("fixed","parameter");
return 0;
}
#包括
#包括
#包括
#包括
#包括
名称空间配置{
类配置{
公众:
配置(const std::string和filename);
config(){};
std::string getConfFileName()常量{return\u confFilename;};
私人:
std::string\u confFilename;
受保护的:
};
类configColumnHeaders:公共配置{
私人:
静态bool注册;
configColumnHeaders(){};
configColumnHeaders(const std::string&filename):config(filename){std::我想这是一个问题,不是吗?谢谢。我不知道代码审查。这个问题实际上与节俭无关(除了你计划使用它)。剥夺了编辑它的自由。