Middle
Papaskink apie dizaino šabloną Builder (Statybininkas).
sobes.tech AI
Atsakymas iš AI
Builder — tai kūrybinis šablonas, leidžiantis žingsnis po žingsnio kurti sudėtingus objektus.
Naudojama, kai:
- Objekto kūrimo procesas yra sudėtingas ir apima daug žingsnių.
- Reikia kurti skirtingus to paties objekto vaizdus.
- Objekto konstruktorius turi daug neprivalomų parametrų.
Šablonas susideda iš šių vaidmenų:
- Builder: Sąsaja, apibrėžianti objekto statymo žingsnius.
- ConcreteBuilder: Konkretus Builder įgyvendinimas, atliekantis statymo žingsnius ir teikiantis metodą gauti paruoštą objektą.
- Product: Sudėtingas objektas, kuris yra kuriamas.
- Director (neprivaloma): Nustato statymo žingsnių iškvietimo tvarką.
Pavyzdys Golang be Director:
// Product - objektas, kurį kuriame
type Pizza struct {
Dough string
Sauce string
Toppings []string
}
// Builder - konstruktoriaus sąsaja
type PizzaBuilder interface {
SetDough(dough string) PizzaBuilder
SetSauce(sauce string) PizzaBuilder
AddTopping(topping string) PizzaBuilder
Build() Pizza // Paruošto objekto gavimo metodas
}
// ConcreteBuilder - konkretus konstruktoriaus įgyvendinimas
type HawaiianPizzaBuilder struct {
pizza Pizza
}
func NewHawaiianPizzaBuilder() *HawaiianPizzaBuilder {
return &HawaiianPizzaBuilder{}
}
func (b *HawaiianPizzaBuilder) SetDough(dough string) PizzaBuilder {
b.pizza.Dough = dough
return b
}
func (b *HawaiianPizzaBuilder) SetSauce(sauce string) PizzaBuilder {
b.pizza.Sauce = sauce
return b
}
func (b *HawaiianPizzaBuilder) AddTopping(topping string) PizzaBuilder {
b.pizza.Toppings = append(b.pizza.Toppings, topping)
return b
}
func (b *HawaiianPizzaBuilder) Build() Pizza {
return b.pizza
}
// Pavyzdys naudojimo
func main() {
// Sukuriame statytoją Havajų picei
builder := NewHawaiianPizzaBuilder()
// Žingsnis po žingsnio statome pica
pizza := builder.
SetDough("plona").
SetSauce("pomidorų").
AddTopping("ananasas").
AddTopping("šoninė").
Build() // Gauti paruoštą picą
fmt.Printf("Sukurta pica: %+v\n", pizza)
}
Šablono privalumai:
- Leidžia izoliuoti sudėtingo objekto kūrimo procesą nuo jo vaizdavimo.
- Užtikrina žingsnis po žingsnio objekto kūrimą.
- Palengvina skirtingų to paties objekto vaizdų kūrimą.
- Padaro objekto kūrimo kodą aiškesnį ir prižiūrimą didelių parametrų kiekiu.
Trūkumai:
- Padidina klasių skaičių projekte.
- Gali būti perteklinis paprastiems objektams.