静态工厂和构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景。
考虑我们有一个人员的类,如果只有姓名是必填的,年龄可选的,也许我们可以提供两个构造函数,但是试想一下,如果有两个类型一样的参数,是不是就没法重载了。或者可选的参数比较多,就比较麻烦了。
这个时候,我们就可以考虑builder
模式了。
public class Person {
private String name;
private int age;
public static class Builder {
private String name;
private int age;
public Builder(String name) {
this.name = name;
}
public Builder withName(String name) {
this.name = name;
return this;
}
public Builder withAge(int age) {
this.age = age;
return this;
}
public Person build() {
return new Person(this);
}
}
public Person(Builder builder) {
this.name = builder.name;
this.age = builder.age;
}
public void desc() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
调用
Person person = new Person.Builder("张三").withAge(30).build();
person.desc();
评论 (0)