2016-11-30 80 views
0

我正面臨設計問題。我想用構建器模式分離構建對象,但問題是必須從配置文件構建對象。構建模式 - 讀取配置文件

到目前爲止,我已經決定從配置創建的所有對象都將存儲在DataContext類(所有對象的容器)中,因爲這些對象狀態將從傳輸更新(因此它們更容易在一個地方)。

我正在使用外部庫從XML文件讀取 - 我的問題是如何隱藏它 - 它是更好的注入到concreteBuilder類?我必須注意到,構建器類將不得不創建大量對象,並在最後連接它們。

Base類可以看起來像:

/* 
* 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(); 
} 

如何正確實現它?從配置文件構建類有什麼更好的模式?

回答

1

我沒有看到這個問題,但也許你可以注入另一個'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(); 
    } 
};