← Назад к вопросам
Какие знаешь Builder в Java?
2.0 Middle🔥 191 комментариев
#SOLID и паттерны проектирования
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Builder паттерн в Java
Builder — это паттерн проектирования, который позволяет пошагово создавать сложные объекты. Это особенно полезно когда конструктор имеет много параметров или объект требует сложной инициализации.
1. Классический Builder паттерн
Проблема: множество конструкторов
// Антипаттерн — множество перегруженных конструкторов
public class User {
private String name;
private String email;
private String phone;
private int age;
private String address;
private boolean isAdmin;
public User(String name) { ... }
public User(String name, String email) { ... }
public User(String name, String email, String phone) { ... }
// Становится невозможно управлять...
}
Решение: Builder
public class User {
private final String name;
private final String email;
private final String phone;
private final int age;
private final String address;
private final boolean isAdmin;
// Приватный конструктор
private User(UserBuilder builder) {
this.name = builder.name;
this.email = builder.email;
this.phone = builder.phone;
this.age = builder.age;
this.address = builder.address;
this.isAdmin = builder.isAdmin;
}
// Статический Builder класс
public static class UserBuilder {
private String name;
private String email;
private String phone;
private int age;
private String address;
private boolean isAdmin = false;
public UserBuilder(String name) {
this.name = name;
}
public UserBuilder email(String email) {
this.email = email;
return this;
}
public UserBuilder build() {
if (this.email == null) {
throw new IllegalArgumentException("Email is required");
}
return new User(this);
}
}
}
2. StringBuilder — встроенный Builder
// StringBuilder для эффективного построения строк
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World!");
String result = sb.toString();
3. ProcessBuilder
ProcessBuilder pb = new ProcessBuilder()
.command("java", "-version")
.directory(new File("/home/user"));
Process process = pb.start();
4. Lombok @Builder
import lombok.Builder;
@Builder
public class User {
String name;
String email;
int age;
}
User user = User.builder()
.name("John")
.email("john@example.com")
.age(30)
.build();
Преимущества Builder
- Читаемость — код четкий и понятный
- Гибкость — легко добавить новые параметры
- Безопасность — объект полностью инициализирован
- Валидация — проверка в методе build()
- Неизменяемость — финальные поля объекта
Итог
Builder — мощный паттерн для создания сложных объектов. Java предоставляет встроенные реализации (StringBuilder, ProcessBuilder), и разработчики создают собственные для доменных объектов.