Middle
"Qurucu" dizayn nümunəsi haqqında danışın.
sobes.tech Süni İntellekt
AI-dan cavab
Dizayn nümunəsi "Builder" (Tərtibçi) — bu yaradıcı nümunədir və mürəkkəb obyektlərin addım-addım yaradılmasına imkan verir. O, mürəkkəb obyektin qurulma prosesini onun təqdimatından ayırır, belə ki, eyni qurma prosesi müxtəlif təqdimatları yarada bilər.
Əsas komponentlər:
- Tərtibçi (Builder): Mürəkkəb obyektin hissələrini yaratmaq üçün metodları müəyyən edən interfeys və ya abstrakt sinif.
- Əsas Tərtibçi (Concrete Builder): Tərtibçi interfeysini həyata keçirir və obyektin hissələrini qurmaq üçün konkret tətbiq təmin edir. O, aralıq nəticəni saxlayır və hazır obyekt almaq üçün metod təqdim edir.
- Direktor (Director): İxtiyari komponent. Obyektin yaradılması üçün tərtibçinin metodlarının çağırış ardıcıllığını müəyyən edir. Konkret tərtibçiləri tanımır.
- Məhsul (Product): Tərtibçi tərəfindən yaradılan mürəkkəb obyekt.
Tətbiqlər:
- Obyektin yaradılma prosesi mürəkkəb və çoxsaylı könüllü mərhələlər ehtiva etdikdə.
- Eyni qurma prosesindən istifadə etməklə müxtəlif təqdimatların yaradılması lazım olduqda.
- Obyektin qurucusunun çox sayda parametri olduqda.
Go dilində nümunə:
// Məhsul - mürəkkəb obyekt
type Product struct {
PartA string
PartB string
PartC string
}
// Tərtibçi - interfeys
type Builder interface {
BuildPartA()
BuildPartB()
BuildPartC()
GetProduct() *Product
}
// KonkretTərtibçi - konkret tərtibçi
type ConcreteBuilder struct {
product *Product
}
func NewConcreteBuilder() *ConcreteBuilder {
return &ConcreteBuilder{product: &Product{}}
}
func (cb *ConcreteBuilder) BuildPartA() {
cb.product.PartA = "Hissə A inşa edildi"
}
func (cb *ConcreteBuilder) BuildPartB() {
cb.product.PartB = "Hissə B inşa edildi"
}
func (cb *ConcreteBuilder) BuildPartC() {
cb.product.PartC = "Hissə C inşa edildi"
}
func (cb *ConcreteBuilder) GetProduct() *Product {
return cb.product
}
// Direktor - ixtiyari
type Director struct {
builder Builder
}
func NewDirector(builder Builder) *Director {
return &Director{builder: builder}
}
func (d *Director) Construct() {
d.builder.BuildPartA()
d.builder.BuildPartB()
d.builder.BuildPartC()
}
// İstifadə
// concreteBuilder := NewConcreteBuilder()
// director := NewDirector(concreteBuilder)
// director.Construct()
// product := concreteBuilder.GetProduct()
// fmt.Printf("Yaradılmış məhsul: %+v\n", product)
Üstünlüklər:
- Obrazın qurulma kodunu müştəri kodundan ayırır.
- Məhsulun daxili təqdimatını dəyişməyə imkan verir, müştəri kodunu dəyişdirmədən.
- Obrazın addım-addım qurulmasına imkan verir.
- Çox parametrləri olan obyektlərin yaradılmasını sadələşdirir.
Çətinliklər:
- Kodun (sinflər/interfeyslər) sayını artırır.
- Sadə obyektlər üçün artıq ola bilər.