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