Sobes.tech
Junior

Mik az előnye van a Builder tervezési mintának egy normál konstruktorhoz képest?

sobes.tech MI

Válasz az MI-től

  • A kód olvashatósága: Lehetővé teszi objektumok létrehozását sok opcionális paraméterrel, így a inicializálási folyamat egyértelműbbé és érthetőbbé válik.
  • Rugalmasság: Egyszerűsíti az opcionális paraméterek és azok kombinációinak kezelését.
  • Biztonság: Biztosítja, hogy az objektum csak akkor jön létre, miután minden szükséges paraméter beállításra került, elkerülve az érvénytelen állapotokat.
  • Teleszkópos konstruktorok elkerülése: Megoldja a konstruktorok számának növekedésével járó problémát a paraméterek számának növekedésével.

Példa:

// Builderrel ellátott osztály
public class User {
    private final String firstName;
    private final String lastName;
    private final int age; // Opcionális

    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() {
            // Kötelező paraméterek ellenőrzése
            if (firstName == null || lastName == null) {
                throw new IllegalStateException("Keresztnév és vezetéknév szükséges.");
            }
            return new User(this);
        }
    }

    // Getterek...
}

// Builder használata
User user = new User.Builder("Ivan", "Petrov")
                   .age(30)
                   .build();

// Összehasonlítás a szokásos konstruktorral
// Több opcionális paraméterrel verzióhoz több konstruktor vagy null átadása szükséges