Middle
Pastāsti par dizaina paraugu Builder (Būvētājs).
sobes.tech AI
Atbilde no AI
Builder — tas ir radniecīgs šablons, kas ļauj pakāpeniski veidot sarežģītus objektus.
To izmanto, kad:
- Objekta izveides process ir sarežģīts un ietver daudz soļus.
- Ir nepieciešams izveidot dažādus tā paša objekta attēlojumus.
- Objekta konstruktors ir ar daudz brīvām parametru.
Šablons sastāv no šādām lomām:
- Builder: Interfeiss, kas nosaka objekta būvniecības soļus.
- ConcreteBuilder: Konkrēta Builder realizācija, kas veic būvniecības soļus un nodrošina metodi, lai iegūtu gatavo objektu.
- Product: Sarežģīts objekts, kas tiek būvēts.
- Director (neobligāti): Nosaka būvniecības soļu izsaukšanas secību.
Piemērs Golang bez Director:
// Product - objekts, kuru būvējam
type Pizza struct {
Dough string
Sauce string
Toppings []string
}
// Builder - būvētāja interfeiss
type PizzaBuilder interface {
SetDough(dough string) PizzaBuilder
SetSauce(sauce string) PizzaBuilder
AddTopping(topping string) PizzaBuilder
Build() Pizza // Gatava objekta iegūšanas metode
}
// ConcreteBuilder - konkrēta būvētāja realizācija
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
}
// Piemērs lietošanai
func main() {
// Izveidojam būvētāju Havaju picai
builder := NewHawaiianPizzaBuilder()
// Pakāpeniski būvējam picas
pizza := builder.
SetDough("plāna").
SetSauce("tomātu").
AddTopping("ananas").
AddTopping("šprotes").
Build() // Saņemam gatavu picas
fmt.Printf("Izveidota pica: %+v\n", pizza)
}
Šablona priekšrocības:
- Ļauj izolēt sarežģīta objekta būvniecības procesu no tā attēlojuma.
- Nodrošina pakāpenisku objekta veidošanu.
- Atvieglo dažādu tā paša objekta attēlojumu veidošanu.
- Padara būvniecības koda lasāmāku un uzturamu, ja ir daudz parametru.
Trūkumi:
- Palielina klases skaitu projektā.
- Var būt lieks vienkāršiem objektiem.