【发布时间】:2012-08-29 09:24:34
【问题描述】:
所以我决定使用工厂设计模式和依赖注入。
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,而不是通过继承将它们紧密耦合? -
迈克·西摩是对的。与更紧密耦合的 is-a 关系(继承)相比,更喜欢 has-a 关系(组合)。也许如果你解释你想做什么,我们可以告诉你如何更好地完成它?
-
我认为继承没有任何重大问题。它应该在任何需要的地方使用。它不应该像其他一切一样被滥用。
-
@KirillKobelev:我完全同意;除非需要,否则应避免使用。
-
什么是“参数过多”?使用 IOC 时,容器会处理它们,而这只发生在您滥用继承或拥有一个可以做所有事情并依赖于宇宙的“上帝对象”时。
标签: c++ design-patterns inheritance dependency-injection