Junior
Aké sú výhody návrhového vzoru Builder v porovnaní s bežným konštruktorom?
sobes.tech AI
Odpoveď od AI
- Čitateľnosť kódu: Umožňuje vytváranie objektov s veľkým počtom voliteľných parametrov, čím robí inicializačný proces jasnejším a zrozumiteľnejším.
- Flexibilita: Zjednodušuje správu voliteľných parametrov a ich kombinácií.
- Bezpečnosť: Zaručuje, že objekt bude vytvorený až po nastavení všetkých potrebných parametrov, čím sa predchádza neplatným stavom.
- Vyhýbanie sa teleskopickým konštruktorom: Rieši problém s rastúcim počtom konštruktorov pri zvyšovaní počtu parametrov.
Príklad:
// Trieda s Builderom
public class User {
private final String firstName;
private final String lastName;
private final int age; // Voliteľný
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() {
// Kontrola povinných parametrov
if (firstName == null || lastName == null) {
throw new IllegalStateException("Meno a priezvisko sú povinné.");
}
return new User(this);
}
}
// Gettery...
}
// Použitie Buildera
User user = new User.Builder("Ivan", "Petrov")
.age(30)
.build();
// Porovnanie s bežným konštruktorom
// Verzia s viacerými voliteľnými parametrami vyžaduje viac konštruktorov alebo odovzdanie null