Шаблоны проектирования Java: конструктор

Каждый сталкивался с одной и той же проблемой при кодировании. Вам нужно создать объект, и у него есть огромный конструктор.

Пример:

User user = new User("1", "John", "Travolta", "amazing street", "2", "New York");

User.java

public class User {
    private String id;
    private String name;
    private String lastName;
    private String street;
    private String streetNumber;
    private String city;

    public User(String id, String name, String lastName, String street, String streetNumber, String city) {
        this.id = id;
        this.name = name;
        this.lastName = lastName;
        this.street = street;
        this.streetNumber = streetNumber;
        this.city = city;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLastName() {
        return lastName;
    }

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

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getStreetNumber() {
        return streetNumber;
    }

    public void setStreetNumber(String streetNumber) {
        this.streetNumber = streetNumber;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

Шаблон строителя, чтобы спасти!

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

Пример:

User user = new User.Builder()
        .id("2")
        .name("John")
        .lastName("Travolta")
        .street("amazing street")
        .streetNumber("2")
        .city("New York")
        .build();

Легче читать, да? Итак, давайте посмотрим немного подробнее!

Как видите, внутри User.java есть новый класс под названием «Builder», в примере User.Builder(), который делегирует создание экземпляра этому новому классу.

Пользователь.java

Примечание. Это не окончательная версия User.java, здесь вы можете увидеть новый класс внутри User.java.

public class User {

    public static class Builder {
        private String id;
        private String name;
        private String lastName;
        private String street;
        private String streetNumber;
        private String city;

        public Builder id(String id) {
            this.id = id;
            return this;
        }

        public Builder name(String name) {
            this.name = name;
            return this;
        }

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

        public Builder street(String street) {
            this.street = street;
            return this;
        }

        public Builder streetNumber(String streetNumber) {
            this.streetNumber = streetNumber;
            return this;
        }

        public Builder city(String city) {
            this.city = city;
            return this;
        }

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

Наиболее важной частью, которую вы можете оценить, является этот метод:

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

Это тот, кто создает экземпляр, который нам нужен, но получает User.Builder в конструкторе, а затем может получить каждое значение из конструктора и создать экземпляр объекта. Вот часть User.java:

Пользователь.java

public class User {
    private String id;
    private String name;
    private String lastName;
    private String street;
    private String streetNumber;
    private String city;

    public User(User.Builder builder) {
        this.id = builder.id;
        this.name = builder.name;
        this.lastName = builder.lastName;
        this.street = builder.street;
        this.streetNumber = builder.streetNumber;
        this.city = builder.city;
    }

}

Все вместе

В конце концов, ваш класс User будет выглядеть следующим образом:

Пользователь.java

public class User {
    private String id;
    private String name;
    private String lastName;
    private String street;
    private String streetNumber;
    private String city;

    public User(User.Builder builder) {
        this.id = builder.id;
        this.name = builder.name;
        this.lastName = builder.lastName;
        this.street = builder.street;
        this.streetNumber = builder.streetNumber;
        this.city = builder.city;
    }

    public static class Builder {
        private String id;
        private String name;
        private String lastName;
        private String street;
        private String streetNumber;
        private String city;

        public Builder id(String id) {
            this.id = id;
            return this;
        }

        public Builder name(String name) {
            this.name = name;
            return this;
        }

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

        public Builder street(String street) {
            this.street = street;
            return this;
        }

        public Builder streetNumber(String streetNumber) {
            this.streetNumber = streetNumber;
            return this;
        }

        public Builder city(String city) {
            this.city = city;
            return this;
        }

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

👇 Понравилась статья? Купи мне кофе! 👇

👉 https://www.buymeacoffee.com/rrbapps 👈