人人都会AI编程

4.3.3 Builder 模式快速出原型技巧

更新时间:2026-06-29

在原型开发或早期迭代中,Builder 模式的价值不仅在于让代码更干净,更在于它能让你不关注复杂构造、不提前定义全部字段,也能快速“搭”出可用对象。下面几个技巧非常实用,且贴近真实开发。


1. 用默认值覆盖“我不关心的部分”

原型阶段很多字段不需要精确值,只想让对象跑通逻辑。Builder 可以为每个字段设置合理默认值,调用方只需设置自己关心的字段。

User user = User.builder()
    .name("测试账号")
    .build();  // email、role 等都自动取默认值,不用传参

技巧:默认值可以直接写在 Builder 的字段初始化里,或者写在 build() 方法中,保证即使不传也不会 NPE。


2. 链式调用让“改一个值”就像改配置

原型调试时常需要改一个字段重新跑。Builder 的链式调用可以把对象创建写成一行,复制粘贴后只改一个字段即可快速变体。

// 正常用户
User normal = User.builder().name("A").status("active").build();

// 仅把状态改成 banned 的异常用户
User banned  = User.builder().name("A").status("banned").build();

这种模板式修改非常适合拼装出多种测试数据,不用每次重写构造器。


3. 用“部分构建”做阶段性原型

不必等到所有字段就绪再 build()。Builder 对象本身可以当作状态容器提前传递,在不同方法里分步填充,最后统一构建。

User.UserBuilder builder = User.builder()
    .name("张三");

// 某条件分支设置权限
if (isAdmin) {
    builder.role("admin");
}

User user = builder.build();  // 最后统一构建

这在原型中写条件分支、读配置拼对象时特别直观,省去临时变量和多重构造。


4. 套娃 Builder 处理“对象嵌套”

原型中经常需要构造嵌套对象(如订单里含用户、地址)。可以为每个复杂字段也配上 Builder,利用一个顶层 Builder 串联。

Order order = Order.builder()
    .orderId("001")
    .buyer(User.builder().name("李四").build())   // 内嵌 Builder
    .address(Address.builder().city("北京").build())
    .build();

这种做法让“手写测试数据”像填表格,不用关心内部构造顺序。


5. 用 IDE 生成 Builder 的“骨架”(或用 Lombok)

真实场景中不可能手写所有 Builder 类。原型阶段直接:

  • 使用 Lombok 的 @Builder 注解,1 秒生成。
  • 或者在 IntelliJ IDEA 中用 InnerBuilder 插件/Generate → Builder 自动生成内部 Builder 类。

注意:原型环境中可暂时忽略所有校验,让 Builder 先跑通再说;后续再补校验和不可变规则。


6. 一次性 build 出“预制样本”集合

把常用的几种对象样本写成静态方法或常量 Builder,后续测试随意取用。

public class PrototypeFixtures {
    public static User regularUser() {
        return User.builder().name("普通用户").role("user").build();
    }

    public static User adminUser() {
        return User.builder().name("管理员").role("admin").build();
    }
}

原型阶段可直接调用 PrototypeFixtures.adminUser(),极大减少重复构造代码。


总结一句话:在原型阶段,Builder 模式让你不再被构造器参数列表绑架——想填就填、想默认就默认、想嵌套就嵌套,改一个值就能给出一版新对象,正是“快速出原型”需要的灵活性。