使用建造者模式创建对象
下面这段代码是在使用 建造者模式(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 类,但麻烦。