Sobes.tech
Back to questions
Junior — Middle
64

Объясните принцип использования паттерна Builder для конструирования объектов.

Answer from AI

sobes.tech AI

Паттерн Builder используется для поэтапного создания сложных объектов. Он позволяет отделить процесс конструирования объекта от его представления, благодаря чему один и тот же процесс может создавать разные представления.

Основная идея:

  • Создается класс Builder с методами для установки различных параметров объекта.
  • Каждый метод возвращает самого Builder, что позволяет вызывать методы цепочкой (fluent interface).
  • В конце вызывается метод build(), который возвращает готовый объект.

Это удобно, когда у объекта много параметров, и не хочется создавать конструкторы с большим количеством аргументов или множество перегруженных конструкторов.

Пример на Java:

public class User {
    private final String firstName;
    private final String lastName;
    private final int age;
    private final String phone;
    private final String address;

    private User(UserBuilder builder) {
        this.firstName = builder.firstName;
        this.lastName = builder.lastName;
        this.age = builder.age;
        this.phone = builder.phone;
        this.address = builder.address;
    }

    public static class UserBuilder {
        private String firstName;
        private String lastName;
        private int age;
        private String phone;
        private String address;

        public UserBuilder setFirstName(String firstName) {
            this.firstName = firstName;
            return this;
        }

        public UserBuilder setLastName(String lastName) {
            this.lastName = lastName;
            return this;
        }

        public UserBuilder setAge(int age) {
            this.age = age;
            return this;
        }

        public UserBuilder setPhone(String phone) {
            this.phone = phone;
            return this;
        }

        public UserBuilder setAddress(String address) {
            this.address = address;
            return this;
        }

        public User build() {
            return new User(this);
        }
    }
}

// Использование:
User user = new User.UserBuilder()
    .setFirstName("Иван")
    .setLastName("Иванов")
    .setAge(30)
    .setPhone("123456789")
    .setAddress("ул. Пушкина, д.10")
    .build();