注解版本
注解使用是Lombok包中的@Builder或者@Accessors(chain = true)
- @Builder
该注解会在编译时将实体类编译为构造器模式,需要构造出builder后并返回内部的实体类 - @Accessors(chain = true)
该注解与普通构造器模式不同,直接在实体类中链式调用set方法,比@Builder使用省略
具体使用时看自己的需求,已知Lombok的部分注解会与其他jar包冲突
编码版本
- 编写一个相应的Builder类,该类只有一个属性(即构造的实体类)
- 将构造的实体类的每个属性在Builder类中编写set方法,并返回Builder类(这是关键,这样才能构成链式调用)
- Builder类中编写一个build方法,用于返回内部构造完成的实体类
- 在实体类中编写builder方法,用于new一个Builder类
示例:
package com.zk.zai.pojo;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @author ZHAIKE
* @date 2021/9/1
*/
@Getter
@Setter
@NoArgsConstructor
public class User {
private Long userId;
private String username;
private String avatar;
// 生成构造器
public UserBuilder builder() {
return new UserBuilder();
}
// 构造器赋值方法,每次set完成后将构造器类返回
public static class UserBuilder {
User user = new User();
public UserBuilder userId(Long userId) {
user.setUserId(userId);
return this;
}
public UserBuilder username(String username) {
user.setUsername(username);
return this;
}
public UserBuilder avatar(String avatar) {
user.setAvatar(avatar);
return this;
}
// 拼接完成,返回构造器内部的实体类
public User build() {
return user;
}
}
}
调用方法:
User user = new User().builder().userId(4L).username("构造器模式").build();