Builder
وقتی یه آبجکت خیلی پارامتر داره
یا ساختنش چند مرحلهایه
یا نمیخوای constructor با ۲۰ تا پارامتر داشته باشی
از Builder استفاده میکنی.
type UserBuilder struct {
name string
email string
age int
address string
}
func NewUserBuilder(name, email string) *UserBuilder {
return &UserBuilder{name: name, email: email}
}
func (b *UserBuilder) Age(age int) *UserBuilder {
b.age = age
return b // chaining
}
func (b *UserBuilder) Address(addr string) *UserBuilder {
b.address = addr
return b
}
func (b *UserBuilder) Build() (*User, error) {
if b.name == "" || b.email == "" {
return nil, fmt.Errorf("name and email are required")
}
return &User{
Name: b.name,
Email: b.email,
Age: b.age,
Address: b.address,
}, nil
}