一、前言
使用builder模式创建实体类比传统的构造器更为简洁,话不多说上代码体会。
二、代码
/**
* 当一个类的属性超过四个,且某些属性可选
* 就适合使用builder模式
*/
@ToString
public class Student {
private String name; // 必选
private int age; // 必选
private String gender; // 必选
private String mobile; // 可选
private String email; // 可选
private String address; // 可选
public Student() {
}
public Student(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.gender = builder.gender;
this.mobile = builder.mobile;
this.email = builder.email;
this.address = builder.address;
}
// 提供静态方法创建 Builder
public static Builder builder() {
return new Builder();
}
// 注意这里不能是 private,否则外部无法调用
static class Builder {
private String name; // 必选
private int age; // 必选
private String gender; // 必选
private String mobile; // 可选
private String email; // 可选
private String address; // 可选
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder gender(String gender) {
this.gender = gender;
return this;
}
public Builder mobile(String mobile) {
this.mobile = mobile;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public Builder address(String address) {
this.address = address;
return this;
}
public Student build() {
return new Student(this);
}
}
// 测试
public static void main(String[] args) {
// Student(name=lisi, age=12, gender=null, mobile=null, email=null, address=北京南)
Student.Builder lisi = Student.builder().name("lisi").age(12).address("北京南");
System.out.println(lisi.build());
// Student(name=lisi, age=12, gender=null, mobile=17383449946, email=null, address=北京南)
lisi.mobile("17383449946");
System.out.println(lisi.build());
// Student(name=zhangsan, age=23, gender=null, mobile=null, email=287885228@qq.com, address=null)
Student zhangsan = Student.builder().name("zhangsan").age(23).email("287885228@qq.com").build();
System.out.println(zhangsan);
}
}