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

Builder模式build()方法两种返回方式的差异探究

Builder模式中两种build()实现的差异分析

方式1:直接返回内部构建的Maze实例

@Override
public Maze build() {
    return maze;
}
  • 核心特点:返回的是Builder内部持有的同一个实例引用。外部拿到对象后,对它的任何修改都会直接影响Builder内部的maze对象;如果Builder后续被复用(比如未重新调用builder()就继续添加房间),之前返回的对象也会跟着变化。
  • 优劣:没有额外对象创建开销,性能高,但线程不安全,且无法保证构建完成后对象状态的稳定性——外部修改会破坏Builder原本构建的结果。

方式2:通过拷贝构造返回新的Maze实例

@Override
public Maze build() {
    return new Maze(maze);
}
  • 核心特点:假设new Maze(maze)是拷贝构造逻辑,返回的是全新的独立实例。外部对返回对象的修改不会影响Builder内部的maze,Builder后续操作也不会干扰已返回的对象。
  • 优劣:能保证构建完成后对象状态的隔离性,线程安全风险更低,但会产生对象拷贝的性能开销,若Maze对象包含大量复杂数据,开销会更明显。

适用场景参考

  • 如果Maze是不可变对象(所有属性为final,无修改方法),方式1完全适用,因为外部无法修改实例,不会有状态污染问题。
  • 如果Maze是可变对象,且希望构建完成后实例状态不能被随意修改,或者Builder可能被多次复用,方式2是更稳妥的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:10:28