使用建造者模式创建对象 - 教程

下面这段代码是在使用 建造者模式(Builder Pattern) 来创建一个 EmployeeLoginVO 对象。它通过链式调用的方式,把字段一个个“塞”进去,最后调用 .build() 方法一次性生成对象。


✅ 它在干什么?

EmployeeLoginVO employeeLoginVO = EmployeeLoginVO.builder()
.id(employee.getId())
.userName(employee.getUsername())
.name(employee.getName())
.token(token)
.build();

等价于:

EmployeeLoginVO employeeLoginVO = new EmployeeLoginVO();
employeeLoginVO.setId(employee.getId());
employeeLoginVO.setUserName(employee.getUsername());
employeeLoginVO.setName(employee.getName());
employeeLoginVO.setToken(token);

更简洁、可读性更强、避免构造参数混乱


✅ 怎样才能实现这种写法?

你需要在 EmployeeLoginVO 类上使用 Lombok@Builder 注解。

✅ 步骤如下:
1. 引入 Lombok(如果还没引入)

Maven 示例:

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
2. 定义 VO 类
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class EmployeeLoginVO
{
private Long id;
private String userName;
private String name;
private String token;
}

✅ 总结一句话:

你之所以能写成 EmployeeLoginVO.builder()...build(),是因为你用了 Lombok 的 @Builder 注解,它帮你自动生成了建造者模式的代码。


拓展:不想用 Lombok?

你也可以手写 Builder 模式,但代码量会多很多。比如:

public class EmployeeLoginVO
{
private Long id;
private String userName;
private String name;
private String token;
private EmployeeLoginVO(Builder builder) {
this.id = builder.id;
this.userName = builder.userName;
this.name = builder.name;
this.token = builder.token;
}
public static Builder builder() {
return new Builder();
}
public static class Builder
{
private Long id;
private String userName;
private String name;
private String token;
public Builder id(Long id) {
this.id = id;
return this;
}
public Builder userName(String userName) {
this.userName = userName;
return this;
}
public Builder name(String name) {
this.name = name;
return this;
}
public Builder token(String token) {
this.token = token;
return this;
}
public EmployeeLoginVO build() {
return new EmployeeLoginVO(this);
}
}
}

✅ 结论:

  • 用 Lombok 的 @Builder 是最简洁的方式。
  • 不想用 Lombok 就手写 Builder 类,但麻烦。

posted on 2025-10-10 12:26  slgkaifa  阅读(3)  评论(0)    收藏  举报

导航