2009-01-22 72 views
0

我有一個應用程序,它產生了很多子對象,並且每個子對象都與一些全局應用程序對象一起工作。在全局應用程序註冊表中註冊,更新應用程序統計信息等。「繼承不,包含」或「繼承,不包含」

應用程序應該如何將這些全局對象的訪問權限轉移給子項?每個孩子是否應該繼承靜態CRegistry和CStatistics,或者應該在創建時將註冊表和統計信息傳遞給孩子?

謝謝。

回答

3

從CRegistry繼承看起來很奇怪 - 子對象不僅僅是專門的註冊管理機構,對嗎?他們與註冊表的交互只是爲了註冊自己,然後在註冊表中找到,我想可以。同上統計。

它聽起來像我的註冊表和統計數據應適當傳遞(例如進入構造函數)。如果對象只是需要註冊並稍後才能找到,您甚至可能甚至不需要將註冊表保存爲成員變量。

如果這確實是一個單一的全局註冊表,那麼可能是是使用單例模式的好時機 - 儘管這樣做會使測試更加困難,以我的經驗。

另外,無論是創建對象註冊它們?它應該真的是孩子對象的工作嗎?

+0

我自己認爲我不應該在這種情況下使用繼承。我正在從C切換到C++並驗證我對繼承的理解。 – jackhab 2009-01-22 08:23:41

0

不,他們當然不應該從註冊表繼承。在每一個包含一個註冊表對象也似乎有點矯枉過正,當然意味着很多重複的代碼。

我可能會親自使用mixin方法。沿着MRegistryObjectMixin的方向創建一個類,它封裝了註冊(和註銷)過程,然後繼承(可能是私人的,所以你有'is-implemented-in-terms-of',而不是'is-a'語義)插入所有需要註冊的對象。設計繼承樹時要小心,以避免可怕的'死亡鑽石'。