Билдеры позволяют создать сложные объекты пошагово, обеспечивая читаемость и облегчая управление объектами с множеством параметров.
type House struct {
floors int
color string
garage bool
}
type HouseBuilder struct {
house *House
}
func NewHouseBuilder() *HouseBuilder {
return &HouseBuilder{house: &House{}}
}
func (b *HouseBuilder) SetFloors(floors int) *HouseBuilder {
b.house.floors = floors
return b
}
func (b *HouseBuilder) SetColor(color string) *HouseBuilder {
b.house.color = color
return b
}
func (b *HouseBuilder) SetGarage(garage bool) *HouseBuilder {
b.house.garage = garage
return b
}
func (b *HouseBuilder) Build() *House {
return b.house
}
func main() {
builder := NewHouseBuilder().
SetFloors(2).
SetColor("blue").
SetGarage(true)
house := builder.Build()
fmt.Printf("House: %+v\n", house)
}