Sobes.tech
Junior

Was sind die Vorteile des Builder-Designmusters im Vergleich zu einem normalen Konstruktor?

sobes.tech KI

Antwort von AI

  • Lesbarkeit des Codes: Ermöglicht die Erstellung von Objekten mit einer großen Anzahl optionaler Parameter, wodurch der Initialisierungsprozess expliziter und verständlicher wird.
  • Flexibilität: Vereinfacht die Verwaltung optionaler Parameter und deren Kombinationen.
  • Sicherheit: Garantiert, dass das Objekt nur erstellt wird, nachdem alle erforderlichen Parameter gesetzt wurden, um ungültige Zustände zu vermeiden.
  • Vermeidung teleskopischer Konstruktoren: Löst das Problem des Wachstums der Anzahl der Konstruktoren bei zunehmender Parameterzahl.

Beispiel:

// Klasse mit Builder
public class User {
    private final String firstName;
    private final String lastName;
    private final int age; // Optional

    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() {
            // Überprüfung der Pflichtparameter
            if (firstName == null || lastName == null) {
                throw new IllegalStateException("Vorname und Nachname sind erforderlich.");
            }
            return new User(this);
        }
    }

    // Getter...
}

// Verwendung des Builders
User user = new User.Builder("Иван", "Петров")
                   .age(30)
                   .build();

// Vergleich mit herkömmlichem Konstruktor (ohne Builder)
// Die Version mit mehr optionalen Parametern erfordert mehrere Konstruktoren oder null-Übergabe