所以我使用組合來彙集對象的集合,所有這些對象都是從基類派生的,可以說組件。 E.g:設計替代?組成和構造
class Component {
public:
Component();
...
private:
int m_address;
...
};
class SpecializedComponent: public Component {
public:
SpecializedComponent()
... //and so on
};
class SpecializedComponent2: public Component {
public:
SpecialIzedComponent2()
... //and so on
};
class ComponentHolder{
SpecializedComponent* m_descriptiveName;
SpecializedComponent2* m_descriptiveName2;
// and so on... many different types of components
}
因此,每個SpecializedComponentX將通過網絡進行通信與個人數據源,每一個都有自己獨特的地址。這些地址在參數文件中指定。目前,我正在解析參數文件,m_address
在派生類構造函數中初始化 - 這是因爲每個m_address都是由我們正在初始化的對象類型指定的。
每個SpecializedComponentX都有一些我想在基類Component中執行的常用功能。所以,我啓動了一個與基類Component相關的線程,對吧?當然 - 有道理。直到我意識到我還沒有該組件的目標地址 - 因爲該對象尚未完全構建。我想旋轉ctor中的基類線程,但我還不知道m_address
。
我想到解決這個問題的唯一方法是提供一個(簡單的)虛擬函數void start()
,派生類可以調用一旦對象完全構造就旋轉起來的線程。這是一個有效的和適當的設計選擇還是有一種模式,我可以忽略?謝謝。
是的,當然。有時候顯而易見的事情是正確的。 – jdt141 2010-01-05 16:36:24