基本上,我有一个拥有另一个对象的类:
class A()
{
A() { initSystems() };
void initSystems();
B b;
}
class B()
{
B() { //Does stuff that requires 'initSystems()' to be called before }
}
为了使“B”起作用,需要在A中调用初始化系统函数。是否有任何“不错”的方法可以解决此问题?像稍后创建“B”对象一样?
最佳答案
听起来您的类(class)太过tightly coupled了。有很多方法可以解决此问题,但这取决于设计的其余部分。
也许A不应拥有B,因为A是B的依赖项。您可以在实例化每个B的情况下,将A的实例inject放入每个B中。
也许B不应该全部存在,并且应该合并到A中:
class A()
{
A() {
initSystems();
//Does stuff that requires 'initSystems()' to be called before
}
void initSystems();
// B's methods
}
我认为大多数初始化方法都是代码异味(也就是说,这表明设计不好)。有人给这种模式命名:"Design Smell: Temporal Coupling"