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

关于Builder模式中类内重复实例化类的技术疑问(自动化编码)

关于Builder模式实现的冗余与create方法疑问解答

先结论:你看到的是错误的Builder模式实现

文中的写法完全违背了Builder模式的设计初衷,才会出现你疑惑的冗余和多余调用问题。

疑问1:实例化User后create又new一个,是否冗余?

是的,这完全是冗余且不合理的。
标准Builder模式的核心是:通过一个Builder对象来收集所有需要的属性,最后一次性构建出目标对象(User),全程只会创建一次目标对象。
而文中的写法先new User(...)创建了一个实例,又在create()里重新new一个新的User,等于做了两次无用功,既浪费内存,也破坏了Builder模式的封装性。

疑问2:已经用setter设了属性,为什么还要调用create?

这也是因为实现错误导致的逻辑混乱。
标准Builder模式里,根本不会给目标对象(User)写setter方法——目标对象通常是不可变类(属性用final修饰,只有构造方法赋值),所有属性的设置都是在Builder类里完成的,create()(或标准的build())方法是第一次也是唯一一次创建User实例的地方,目的是把Builder收集的属性传入User的私有构造方法,生成最终的不可变对象。

给你看一个标准的User Builder模式实现

public class User {
    // 属性设为final,保证不可变
    private final String username;
    private final String password;
    private final String email;

    // 私有构造方法,只能由内部Builder调用
    private User(UserBuilder builder) {
        this.username = builder.username;
        this.password = builder.password;
        this.email = builder.email;
    }

    // 静态内部Builder类,负责收集属性
    public static class UserBuilder {
        private String username;
        private String password;
        private String email;

        // 链式调用的属性设置方法
        public UserBuilder username(String username) {
            this.username = username;
            return this;
        }

        public UserBuilder password(String password) {
            this.password = password;
            return this;
        }

        public UserBuilder email(String email) {
            this.email = email;
            return this;
        }

        // 最终构建User实例的方法
        public User create() {
            // 这里才是第一次创建User对象
            return new User(this);
        }
    }
}

// 使用方式(清晰且无冗余)
User validUser = new User.UserBuilder()
    .username("john_doe")
    .password("secure123")
    .email("john@example.com")
    .create();

总结

你看到的文章里的代码是对Builder模式的误用,才会出现这些奇怪的冗余操作。真正的Builder模式应该是通过Builder类封装属性设置逻辑,最后一次性生成不可变的目标对象,既保证代码可读性,也避免了不必要的对象创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:17:14