Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 生成器模式-配置文件读取_C++_Design Patterns - Fatal编程技术网

C++ 生成器模式-配置文件读取

C++ 生成器模式-配置文件读取,c++,design-patterns,C++,Design Patterns,我面临一个设计问题。我想用构建器模式分离构建对象,但问题是对象必须从配置文件构建 到目前为止,我已经决定,所有从配置创建的对象都将存储在DataContext类(所有对象的容器)中,因为这些对象的状态将从传输中更新(因此将它们放在一个位置更容易) 我正在使用外部库来读取XML文件——我的问题是如何隐藏它——将它注入concreteBuilder类是否更好?我必须注意到,生成器类必须创建大量对象,并在最后将它们相互连接起来 基类可以如下所示: /* * IDataContextBuilder

我面临一个设计问题。我想用构建器模式分离构建对象,但问题是对象必须从配置文件构建

到目前为止,我已经决定,所有从配置创建的对象都将存储在DataContext类(所有对象的容器)中,因为这些对象的状态将从传输中更新(因此将它们放在一个位置更容易)

我正在使用外部库来读取XML文件——我的问题是如何隐藏它——将它注入concreteBuilder类是否更好?我必须注意到,生成器类必须创建大量对象,并在最后将它们相互连接起来

基类可以如下所示:

/*
 * IDataContextBuilder
 * base class for building data context object
 * and sub obejcts
 */
class IDataContextBuilder {
public:
    /*
     * GetResult()
     * returns result of building process
     */
    virtual DataContext * GetResult () = 0;
    /*
     * Virtual destructor
     */
    virtual ~IDataContextBuilder() {    }
};

class ConcreteDataContextBuilder {
public:
     ConcreteDataContextBuilder(pugi::xml_node & rootNode);
     DataContext * GetResult ();
}

如何正确实施?从配置文件构建类的更好模式是什么?

我看不出有什么问题,但是您可以插入另一个“Director”类,该类接收特定的生成器,加载配置文件,并生成调用相应生成器子类的对象

我的意思是:

class DataContextDirector {
public:
    void SetBuilder(IDataContextBuilder* builder);

    void SetConfig(const std::string& configFilePath); // or whatever

    DataContext* ProduceObject() {
        // pseudo-code here:
        // myBuilder->setup(xmlNodeOfConfig);
        // return myBuilder->GetResult();
    }
};

我不认为这有什么问题,但也许您可以注入另一个“Director”类,该类接收特定的生成器,加载配置文件,并生成调用相应生成器子类的对象

我的意思是:

class DataContextDirector {
public:
    void SetBuilder(IDataContextBuilder* builder);

    void SetConfig(const std::string& configFilePath); // or whatever

    DataContext* ProduceObject() {
        // pseudo-code here:
        // myBuilder->setup(xmlNodeOfConfig);
        // return myBuilder->GetResult();
    }
};