建造者模式构建对象

目录

一、创建类

二、用法

三、完整代码


一、创建类

java 复制代码
@Builder
public class User {
    private final String name;
    private final int age;
    @Builder.Default private String address = "Unknown";
    @Builder.Default private String email = "N/A";
}

二、用法

(1) 链式调用:可读性高
java 复制代码
User user = User.builder()
    .name("Alice")
    .age(25)
    .address("New York")
    .email("alice@example.com")
    .build();
  • 自文档化:代码即文档,无需查看类定义即可理解参数意义。
(2) 处理多参数和可选参数
  • 灵活构造:可选参数可以跳过,必填参数强制要求设置。

  • 避免"伸缩构造函数"问题(无需为不同参数组合重载多个构造函数)。

(3) 支持不可变对象
  • 对象一旦通过 build() 创建,所有属性变为 final,保证线程安全和状态一致性。

  • 普通 Setter 方法会破坏不可变性。

(4) 分离构造逻辑
  • 构造过程通过 Builder 类封装,与目标类解耦。

  • 可以在 build() 方法中添加校验逻辑,确保对象有效性。

三、完整代码

java 复制代码
@Builder
public class User {
    private final String name;
    private final int age;
    @Builder.Default private String address = "Unknown";
    @Builder.Default private String email = "N/A";
}

// 使用方式
User user = User.builder()
    .name("Alice")
    .age(25)
    .address("New York")
    .email("alice@example.com")
    .build();
相关推荐
jaysee-sjc几秒前
【苍穹外卖】Day12:工作台数据看板与 Excel 报表导出
java·开发语言·数据库·spring boot·spring·微信·excel
w_zero_one2 分钟前
算法--桶思想
java·开发语言·算法
MetaLite4 分钟前
Spring 同一个类里调用 @CacheEvict,为什么缓存没清掉?
java·spring·缓存
sunburn-19 分钟前
数据库聚合查询完整教程:从基础函数到实战统计
java·数据库·mysql·数据库开发
wangchunyu11427 分钟前
JAVA 类加载机制与双亲委派模型
java·开发语言
小蒜学长40 分钟前
基于 Spring Boot 的英语单词背诵系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
lambo mercy1 小时前
持久化01——线程级持久化
java·开发语言·jvm
CoderYanger1 小时前
Java EE 进阶:5. Spring IoC&DI(第一弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
zyseo81 小时前
谷歌SEO 内容更新焕新流程:让老页面重新起量
java·前端·javascript
萧瑟余晖2 小时前
Spring Data JDBC与R2DBC详解
java·后端·spring