Ответ
public class User {
private final String firstName;
private final String lastName;
private final int age;
private User(Builder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
}
public static class Builder {
private String firstName;
private String lastName;
private int age;
public Builder firstName(String firstName) {
this.firstName = firstName;
return this;
}
public Builder lastName(String lastName) {
this.lastName = lastName;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public User build() {
return new User(this);
}
}
}
// Использование:
User user = new User.Builder()
.firstName("John")
.lastName("Doe")
.age(30)
.build();
Паттерн Builder позволяет создавать объекты с большим количеством параметров, делая код читаемым и избегая "телескопических конструкторов". Особенно полезен, когда некоторые параметры необязательны.