Middle
Tərtibat nümunəsi 'Builder' nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Dizayn nümunəsi "Builder" (Tərtibçi) — bu, çox mərhələli obyektin yaradılması üçün metod təmin edən yaradıcı nümunədir. O, mürəkkəb obyektin qurulma prosesini onun təqdimatından ayırır, bu da eyni qurma prosesindən istifadə etməyə imkan verir müxtəlif təqdimatlar yaratmaq üçün.
Nümunənin əsas komponentləri:
- Builder: Abstrakt və ya konkret interfeys (və ya sinif), məhsulun hissələrinin mərhələli qurulması üçün metodlar toplusunu müəyyən edir.
- ConcreteBuilder: Builder-in konkret tətbiqi, məhsulun spesifik təqdimatını yaradır. O, bütün qurulma detalları ilə tanışdır.
- Director: İstəyə bağlı, amma tez-tez istifadə olunan sinif. O, məhsulun müəyyən konfiqurasiyasını yaratmaq üçün qurma addımlarının sırasını müəyyən edir.
- Product: Qurulmaqda olan mürəkkəb obyekt. O, çox sayda hissədən ibarətdir.
Üstünlüklər:
- Mürəkkəb obyektləri mərhələli şəkildə yaratmağa imkan verir, "teleskopik" konstruktordan (çox sayda parametrli konstruktordan) qaçınır.
- Mürəkkəb obyektin yaradılma loqikasını inkapsulyasiya edir.
- Məhsulun daxili təqdimatını dəyişdirməyi asanlaşdırır.
- Eyni qurma prosesindən istifadə etməklə müxtəlif məhsul variantları yarada bilir.
Tətbiq sahələri:
- O zaman ki, obyektin yaradılması prosesi çox mərhələdən ibarətdir və bu mərhələlər müəyyən ardıcıllıqla yerinə yetirilməlidir.
- Eyni obyektin müxtəlif təqdimatlarına ehtiyac olduqda.
- Obyektin qurucusunun çox sayda seçim parametri olduqda.
Nümunə:
// Məhsul
class Pizza {
private String xəmər = "";
private String sous = "";
private List<String> üstlər = new ArrayList<>();
public void setXəmər(String xəmər) {
this.xəmər = xəmər;
}
public void setSous(String sous) {
this.sous = sous;
}
public void addÜst(String üst) {
this.üstlər.add(üst);
}
@Override
public String toString() {
return "Pizza ilə xəmər: " + xəmər + ", sous: " + sous + ", üstlər: " + üstlər;
}
}
// İnterfeys Tərtibçi
interface PizzaBuilder {
void buildXəmər();
void buildSous();
void buildÜstlər();
Pizza getPizza();
}
// Konkret Tərtibçi
class MargheritaPizzaBuilder implements PizzaBuilder {
private Pizza pizza = new Pizza();
@Override
public void buildXəmər() {
pizza.setXəmər("incə xəmər");
}
@Override
public void buildSous() {
pizza.setSous("pomidor");
}
@Override
public void buildÜstlər() {
pizza.addÜst("mozzarella");
pizza.addÜst("reyhan");
}
@Override
public Pizza getPizza() {
return this.pizza;
}
}
// Direktor (istəyə bağlı)
class Aşpaz {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) {
pizzaBuilder = pb;
}
public Pizza getPizza() {
return pizzaBuilder.getPizza();
}
public void pizzaHazırlamaq() {
pizzaBuilder.buildXəmər();
pizzaBuilder.buildSous();
pizzaBuilder.buildÜstlər();
}
}
// İstifadə
public class BuilderExample {
public static void main(String[] args) {
Aşpaz aşpaz = new Aşpaz();
PizzaBuilder margheritaBuilder = new MargheritaPizzaBuilder();
aşpaz.setPizzaBuilder(margheritaBuilder);
aşpaz.pizzaHazırlamaq();
Pizza margherita = aşpaz.getPizza();
System.out.println(margherita);
}
}
Test avtomatlaşdırması kontekstində, "Builder" tez-tez test məlumatlarının və ya mürəkkəb test obyektlərinin (məsələn, çox atributlu istifadəçi obyekti, çox sayda elementə malik sifariş obyekti) yaradılmasında istifadə olunur, burada müxtəlif test ssenariləri üçün bu məlumatların müxtəlif variantlarını çevik şəkildə tənzimləmək tələb olunur.