See https://en.wikipedia.org/wiki/Builder_pattern
The simplest way to build a struct.
car = Car.new("Blues Mobil")
# Or full struct
car = %Car{name: "Blue Ocean", color: :blue, color_doors: :cyan}
With a builder
CarBuilder.build()
|> name("Blues Mobil")
|> color_doors(:black)
Or with the Director
car = CarDirector.construct("Blues Mobil")
This is useful when exactly one object is needed to coordinate actions across the system.