Sobes.tech
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