Sobes.tech
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.