You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在类A构造函数中实例化依赖A的类B是否为合理设计?

双向依赖的代码实现是否合理?

我不确定以下代码的实现方式是否合理:

class A {
    B b;

    A() {
        this.b = new B(this);
    }
}
class B {
    A a;

    // Requires the A object as a parameter
    B(A a) {
        this.a = a;
    }
}

这么做的原因是类B必须持有A对象才能运行(可将A视为B的持有者)。但这带来了诸多问题,我不确定这是否属于反模式,且在对A进行单元测试时,由于没有依赖注入,很难Mock或省略B对象。

我原本认为无法在此处实现依赖注入,因为B对象需要A才能运行,无法通过构造参数传入。我想到的唯一解决方案是添加setUp方法:

// In the A class
public void setUp(B b) {
    this.b = b;
}

这种方式能分离测试与业务代码,同时符合依赖注入模式,但我不确定该方案是否理想。

补充说明:此前被标记为重复的帖子与我的问题并不相关,那个帖子出现了StackOverflowError,而我的代码没有,且其构造函数无参数。

进一步说明场景:我的A类是ClientClass,B类是AccountController。AccountController负责处理客户的所有账户操作,如登录登出、账户增删及当前账户跟踪,每个客户对应一个AccountController。其他类通过ClientClass对象获取AccountController,我这么做主要是为了可读性。


内容的提问来源于stack exchange,提问作者Shadow504

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:50:43