Factory Builder dizayn nümunəsi nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Çətin obyektlərin yaradılmasında Factory Builder nümunəsindən, və ya daha düzgün desək, Factory Method və Builder-in birləşməsindən istifadə olunur. Bu iki nümunə mürəkkəb obyektlərin yaradılmasını yaxşılaşdırır.
Factory Method bir obyektin yaradılması üçün interfeys təyin edir, lakin hansı sinfin instansiya ediləcəyinə alt siniflər qərar verir. O, obyektin yaradılmasının məsuliyyətini alt siniflərə verir.
Builder mürəkkəb obyektin qurulmasını onun təqdimatından ayırır, belə ki, eyni quruluş prosesi müxtəlif təqdimatlar yarada bilər. Bu, obyektin addım-addım qurulmasına imkan verir və metod zənciri istifadə edir.
Bu nümunələrin birləşməsi ən çox mürəkkəb obyektin bir neçə variantını yaratmaq lazım olduğu hallarda rast gəlinir. Factory Method, hansı Builder növünün istifadə ediləcəyini müəyyən edir, və Builder isə bu növ obyektin müxtəlif konfiqurasiyalarla necə yaradılacağını idarə edir.
İstifadə nümunəsi: Mürəkkəb başlanğıc tələb edən obyektlər hiyerarşisinə sahibsinizsə və bu obyektləri müxtəlif konfiqurasiyalarla yaratmaq istəyirsinizsə.
Tipik qarşılıqlı əlaqə strukturu:
- İstehsalçı: Giriş parametrlərinə və ya öz növünə əsaslanaraq müəyyən bir Builder nümunəsini qaytarır.
- Builder: Mürəkkəb obyektin parametrlərini addım-addım tənzimləmək üçün metodlara və son
build()metoduna malikdir, hansı ki, hazır obyekt qaytarır. - Məhsul: Builder tərəfindən yaradılan mürəkkəb obyekt.
Üstünlüklər:
- Mürəkkəb obyektlərin yaradılmasında kodun oxunaqlığını və idarə olunmasını yaxşılaşdırır.
- Eyni növ obyekt üçün müxtəlif konfiqurasiyaların yaradılmasına elastiklik verir.
- Obyektin yaradılma məntiqini onun təqdimatından ayırır.
- Yeni məhsul tiplərinin (Factory Method istifadə etməklə) və ya yeni qurma üsullarının (Builder istifadə etməklə) əlavə edilməsini asanlaşdırır.
Çatışmazlıqlar:
- Layihədə sinf sayının artması.
- Sadə obyektlər üçün artıq ola bilər.
Nümunə (sözsüz kod):
// Məhsul
class ComplexObject {
private String partA;
private int partB;
// özəl konstruktor
private ComplexObject(String partA, int partB) {
this.partA = partA;
this.partB = partB;
}
// Daxili Builder sinfi
public static class Builder {
private String partA;
private int partB;
public Builder setPartA(String partA) {
this.partA = partA;
return this;
}
public Builder setPartB(int partB) {
this.partB = partB;
return this;
}
public ComplexObject build() {
return new ComplexObject(partA, partB);
}
}
}
// Fabrika, hansı ki, Builder qaytarır
class ComplexObjectFactory {
public static ComplexObject.Builder createDefaultBuilder() {
return new ComplexObject.Builder()
.setPartA("defaultA")
.setPartB(10);
}
public static ComplexObject.Builder createSpecialBuilder() {
return new ComplexObject.Builder()
.setPartA("specialA")
.setPartB(50);
}
}
// İstifadə:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();