建造者模式,在设计模式中属创建型模式范畴,意在将一个复杂对象的构建过程与其表现相互分离,逐步构建复杂对象,但一个复杂对象去对应一个 builder 感觉略显“奢侈”,考虑有无可能,抽取一个通用 builder,用于所有复杂对象的构建过程,见下文。
public class Builder<T> {
private T t;
private Builder(T t) {
this.t = t;
}
public static <T> Builder<T> of(Supplier<T> supplier) {
return new Builder<>(supplier.get());
}
public <V> Builder<T> field(Setter<T, V> setter, V value) {
setter.accept(t, value);
return this;
}
public T build() {
return this.t;
}
public interface Setter<T, V> extends BiConsumer<T, V> {
}
}
@Data
class Student {
private String name;
private Integer age;
}
@Data
class Teacher {
private String name;
private Integer age;
private String phone;
}
public class Main {
public static void main(String[] args) {
var stu = Builder.of(Student::new)
.field(Student::setName, "小李")
.field(Student::setAge, 10)
.build();
System.out.println(stu);
var tea = Builder.of(Teacher::new)
.field(Teacher::setName, "王老师")
.field(Teacher::setAge, 20)
.field(Teacher::setPhone, "13333333333")
.build();
System.out.println(tea);
}
}