java建造者模式通过私有构造器、静态builder类、链式调用和build()校验实现封装与优雅创建:强制经builder实例化、字段不可变、必填校验前置、支持默认值与复用。

Java 中通过封装实现优雅的建造者模式,核心在于把对象的构造逻辑从构造函数中剥离,交由独立的 Builder 类 管理,同时利用 私有构造器 + 链式调用 + 不可变性 保证封装性和使用体验。
用私有构造器封住直接实例化
目标类(如 Person)不提供公有构造方法,只保留一个私有全参或私有构造器,强制用户必须通过 Builder 创建实例:
- 避免参数过多导致的构造函数爆炸(如 5+ 参数的
new Person(...)) - 防止字段被外部绕过校验直接赋值(比如绕过年龄合法性检查)
- 确保对象一旦创建就处于有效、完整状态(所有必填字段已设置)
Builder 内部静态类 + 链式调用
将 Builder 设为目标类的 public static class,每个 setter 方法返回 this,形成流畅 API:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 字段设为 private final,Builder 内部维护临时状态(如
private String name;) - 每个
name(String n)方法赋值后return this;,支持连续调用:new Person.Builder().name("Tom").age(25).build() - Builder 的
build()方法负责校验(如 age > 0)、组装并调用目标类私有构造器
封装校验逻辑到 Builder 中
把业务规则和数据约束从目标类“挪”到 Builder 的 build() 里,既保持目标类干净,又守住入口关:
- 例如:邮箱格式校验、手机号长度检查、必填字段非空判断,都在
build()中统一做 - 校验失败抛出
IllegalArgumentException,错误信息明确(如"email cannot be null") - 目标类本身不再需要重复校验,专注表达数据结构与行为
支持可选字段与默认值(进阶封装)
对非必填字段,在 Builder 中提供默认值或重载方法,进一步降低使用门槛:
- 在 Builder 构造时初始化默认值:
private int level = 1; - 提供无参 setter(如
admin(boolean a))或带默认的重载(avatar(String url)和avatar()) - 甚至支持构建器复用(Builder 实例可缓存、修改、多次 build),适合模板化对象生成
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










