Sobes.tech
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);
        }
    }

    // Getter-ներ...
}

// Օգտագործում Builder
User user = new User.Builder("Иван", "Петров")
                   .age(30)
                   .build();

// համեմատություն սովորական կոնստրուկտորին
// ավելի շատ ընտրական պարամետրերով տարբերակը պահանջում է մի քանի կոնստրուկտոր կամ null փոխանցում