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