基本上,我有一个拥有另一个对象的类:

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"

07-26 07:33