From f600fa3429a8c445630144a40086955da575686e Mon Sep 17 00:00:00 2001 From: Ryan Hartje Date: Sat, 6 Oct 2018 12:41:43 -0400 Subject: [PATCH] updated builder pattern example for code completeness. --- creational/builder.md | 84 ++++++++++++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 21 deletions(-) diff --git a/creational/builder.md b/creational/builder.md index e19179e..0acd892 100644 --- a/creational/builder.md +++ b/creational/builder.md @@ -13,38 +13,80 @@ however passing a struct to the builder method fills the code with boilerplate ```go package car +import ( + "fmt" +) + 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" + MPH Speed = 1 + KPH Speed = 1.60934 + SportsWheels Wheels = "sports" + SteelWheels Wheels = "steel" + BlueColor Color = "blue" + GreenColor Color = "green" + RedColor Color = "red" ) type Builder interface { - Color(Color) Builder - Wheels(Wheels) Builder - TopSpeed(Speed) Builder - Build() Interface + Color(Color) Builder + Wheels(Wheels) Builder + TopSpeed(Speed) Builder + Build() Interface } type Interface interface { - Drive() error - Stop() error + Drive() error + Stop() error +} + +type carBuilder struct { + speedOption Speed + color Color + wheels Wheels +} + +func (c *car) Drive() error { + fmt.Println("VROOM") + return nil +} + +func (c *car) Stop() error { + return nil +} + +func (cb *carBuilder) Color(color Color) Builder { + cb.color = color + return cb +} + +func (cb *carBuilder) Wheels(wheels Wheels) Builder { + cb.wheels = wheels + return cb +} + +func (cb *carBuilder) TopSpeed(speed Speed) Builder { + cb.speedOption = speed + return cb +} + +func (cb *carBuilder) Build() Interface { + return &car{ + topSpeed: cb.speedOption, + color: cb.color, + } +} + +func NewBuilder() Builder { + return &carBuilder{} +} + +type car struct { + topSpeed Speed + color Color } ```