← Назад к вопросам

Какие знаешь 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), и разработчики создают собственные для доменных объектов.

Какие знаешь Builder в Java? | PrepBro