所以我決定使用工廠設計模式和依賴注入。依賴注入/繼承設計模式的構造器參數過多
class ClassA
{
Object *a, *b, *c;
public:
ClassA(Object *a, Object *b, Object *c) :
a(a), b(b), c(c) {}
};
class ClassB : public ClassA
{
Object *d, *e, *f;
public:
ClassB(Object *a, Object *b, Object *c, Object *d, Object *e, Object *f) :
ClassA(a, b, c), d(d), e(e), f(f) {}
};
現在,問題是classB對構造函數的參數太多。這是一個單獨的繼承層示例,但是當繼承層開始變得更深,並且每個圖層類需要構建更多的對象時,頂層的構造函數最終需要太多參數才能創建!
我知道我可以使用setter而不是構造函數,但是有沒有其他方法?
我的一般方法是儘可能地避免繼承,並儘量讓每個類都集中在一個責任上。你可以單獨構造'ClassA',然後初始化'ClassB'並引用它,而不是通過繼承將它們緊密耦合? –
Mike Seymour是對的。優先考慮具有更緊密耦合的is-a關係(繼承)的關係(組合)。也許如果你解釋你想做什麼,我們可以告訴你如何更好地完成它? – metal
我沒有看到任何與繼承有關的主要問題。它應該在需要的地方使用。它不應該像其他一切一樣被濫用。 –