2014-04-05 32 views
0

我有一個包含大量數據成員和函數的類,其中每個函數都有一些自己的功能,並使用類的成員變量做一些工作。不同類的數據的單拷貝

主要問題在於功能被添加到班級中,班級代碼越來越大,難以維護。

這裏這個類是被調用並輸出一些結果的接口。

我想讓這個類作爲基礎,併爲每個函數創建派生類,這些函數是相互獨立的,並且可以使用基類中的公共數據成員。 但是這裏的問題是,每個派生類將包含一個單獨的數據成員副本,而另一個模塊應該不知道這些派生類。

我知道這可能是一個更簡單的問題,但任何人都可以指出我可以在這裏引用哪種設計模式。

回答

1

執行共享應該更好地通過組合而不是繼承來完成。繼承模型是一種關係(Liskov替代原則)。從描述來看,這聽起來像班級應該分成小班,希望有一個單一的責任(單一責任原則)。然後,將這些類作爲構造函數中的參數或需要它們的函數傳遞給您的客戶端代碼。然後可以通過持有指針,引用或 - recommended - shared_ptr來完成在多個類之間共享對象。

class BigClass { 
public: 
// lots of functions here 
}; 

class Client1 { 
public: 
    Client1(std::shared_ptr<BigClass> b): mBigClass(b) {} 

    void member() { 
     // do something with mBigClass 
    } 
private: 
    std::shared_ptr<BigClass> mBigClass; 
}; 

但我建議強烈考慮拆分它(請參閱接口隔離原理)。