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