вторник, 8 октября 2019 г.

Паттерны в Golang: Builder (Строитель)

Паттерн Builder (Строитель) отделяет конструкцию сложного объекта от его представления, так что один и тот же процесс строительства может создать разные представления.

Обычно в Go для достижения того же эффекта используется struct конфигурации, но передача struct в builder метод заполонит код шаблонными проверками if cfg.Field != nil {...}

Реализация

package car

type Speed float64

const (
    MPH Speed = 1
    KPH       = 1.60934
)

type Color string

const (
    BlueColor  Color = "blue"
    GreenColor       = "green"
    RedColor         = "red"
)

type Wheels string

const (
    SportsWheels Wheels = "sports"
    SteelWheels         = "steel"
)

type Builder interface {
    Color(Color) Builder
    Wheels(Wheels) Builder
    TopSpeed(Speed) Builder
    Build() Interface
}

type Interface interface {
    Drive() error
    Stop() error
}

Использование

assembly := car.NewBuilder().Color(car.RedColor)

familyCar := assembly.Wheels(car.SportsWheels).TopSpeed(50 * car.MPH).Build()
familyCar.Drive()

sportsCar := assembly.Wheels(car.SteelWheels).TopSpeed(150 * car.MPH).Build()
sportsCar.Drive()


Читайте также:


Комментариев нет:

Отправить комментарий