我正面临设计问题。我想用构建器模式分离构建对象,但问题是必须从配置文件构建对象。
到目前为止,我已经决定从配置创建的所有对象都将存储在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 ();
}
如何正确实施?从配置文件构建类可能有什么更好的模式?
答案 0 :(得分:2)
我没有看到它的问题,但也许你可以注入另一个'Director'类接收一个特定的构建器,加载配置文件,并生成调用相应的builder-subclasses的对象。
我的意思是:
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();
}
};