Sobes.tech
Junior

Ποια είναι τα πλεονεκτήματα του μοτίβου σχεδίασης Builder σε σύγκριση με έναν απλό κατασκευαστή;

sobes.tech AI

Απάντηση από AI

  • Αναγνωσιμότητα κώδικα: Επιτρέπει τη δημιουργία αντικειμένων με μεγάλο αριθμό προαιρετικών παραμέτρων, καθιστώντας τη διαδικασία αρχικοποίησης πιο εμφανή και κατανοητή.
  • Ευελιξία: Απλοποιεί τη διαχείριση των προαιρετικών παραμέτρων και των συνδυασμών τους.
  • Ασφάλεια: Διασφαλίζει ότι το αντικείμενο θα δημιουργηθεί μόνο αφού οριστούν όλες οι απαραίτητες παράμετροι, αποτρέποντας μη έγκυρες καταστάσεις.
  • Αποφυγή τηλεσκοπικών κατασκευαστών: Λύνει το πρόβλημα της αύξησης του αριθμού των κατασκευαστών καθώς αυξάνονται οι παράμετροι.

Παράδειγμα:

// Κλάση με Builder
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 final String firstName;
        private final String lastName;
        private int age;

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

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

        public User build() {
            // Έλεγχος υποχρεωτικών παραμέτρων
            if (firstName == null || lastName == null) {
                throw new IllegalStateException("Απαιτούνται όνομα και επώνυμο.");
            }
            return new User(this);
        }
    }

    // Getters...
}

// Χρήση του Builder
User user = new User.Builder("Иван", "Петров")
                   .age(30)
                   .build();

// Σύγκριση με συνηθισμένο κατασκευαστή
// Η έκδοση με περισσότερες προαιρετικές παραμέτρους απαιτεί πολλαπλούς κατασκευαστές ή μεταβίβαση null