diff --git a/creational/builder/builder.go b/creational/builder/builder.go new file mode 100644 index 0000000..092bce0 --- /dev/null +++ b/creational/builder/builder.go @@ -0,0 +1,49 @@ +package builder + +type BuildProcess interface { + SetWheels() BuildProcess + SetSeats() BuildProcess + SetStructure() BuildProcess + GetVehicle() VehicleProduct +} + +type VehicleProduct struct { + Wheels int + Seats int + Structure string +} + +type CarBuilder struct { + v VehicleProduct +} + +func (c *CarBuilder) SetWheels() BuildProcess { + c.v.Wheels = 2 + return c +} + +func (c *CarBuilder) SetSeats() BuildProcess { + c.v.Seats = 5 + return c +} + +func (c *CarBuilder) SetStructure() BuildProcess { + c.v.Structure = "Car" + return nil +} + +func (c *CarBuilder) GetVehicle() VehicleProduct { + return c.v +} + +type ManufactureDirector struct { + builder BuildProcess +} + +func (f *ManufactureDirector) SetBuilder(b BuildProcess) { + f.builder = b +} + +func (f *ManufactureDirector) Construct() { + f.builder.SetSeats().SetStructure().SetWheels() +}