@Data
public class Student {
private String id;
private String name;
private String sex;
private int age;
private String grade;
private String email;
private String addr;
public static class Builder {
// 必须初始化的属性
private String id;
private String name;
// 可选属性
private String sex;
private int age;
private String grade;
private String email;
private String addr;
public Builder(String id, String name) {
this.id = id;
this.name = name;
}
public Builder sex(String sex) {
this.sex = sex;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder grade(String grade) {
this.grade = grade;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public Builder addr(String addr) {
this.addr = addr;
return this;
}
public Student builder() {
return new Student(this);
}
}
public Student(Builder builder) {
this.id = builder.id;
this.name = builder.name;
this.sex = builder.sex;
this.age = builder.age;
this.grade = builder.grade;
this.email = builder.email;
this.addr = builder.addr;
}
}
使用构建器Builder,你可以这样创建对象:
Student student = new Student.Builder("20150102", "Tom").sex("male").age(12)
.grade("11").email("cg@163.com").addr("无皮村").builder();
Builder模式缺点:
为了创建对象必须先创建它的构建器,在某些非常注重性能的情况下,可能其开销就是问题了;
Builder模式相对来说,代码量更多,所以通常只有在很多参数的时候才使用,尤其是大多数参数都是可选的时候。