建造者模式构建对象

目录

一、创建类

二、用法

三、完整代码


一、创建类

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();
相关推荐
BBB努力学习程序设计1 分钟前
Java注解(Annotation)深度解析:从元编程到框架设计
java
2501_916766547 分钟前
【SpringMVC】实现文件上传
java·spring
Jack_abu7 分钟前
详解java中的BlockingQueue阻塞队列
java·juc·阻塞队列·blockingqueue
她说..7 分钟前
Spring AOP场景4——事务管理(源码分析)
java·数据库·spring boot·后端·sql·spring·springboot
爬山算法27 分钟前
Netty(17)Netty如何处理大量的并发连接?
java·后端
syt_101327 分钟前
设计模式之-代理模式
设计模式·代理模式
spencer_tseng38 分钟前
springcloud + javaframework + h5
java·spring·spring cloud
月明长歌1 小时前
【码道初阶】【Leetcode606】二叉树转字符串:前序遍历 + 括号精简规则,一次递归搞定
java·数据结构·算法·leetcode·二叉树
原来是好奇心1 小时前
深入Spring Boot源码(八):高级特性与扩展点深度解析
java·源码·springboot