From 131bd3cec7c71759c489e9bbdec9924f0703de93 Mon Sep 17 00:00:00 2001 From: Jian Han Date: Thu, 9 Nov 2017 22:21:17 +1000 Subject: [PATCH] builder pattern --- creational/builder/builder.go | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 creational/builder/builder.go 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() +}