Reason to use: 
- When the construction of an instance involves many different options.
  This would normally lead to a large collection of constructors.
  Instead, the logic for building an instance is centralized to
  a builder class. It allows arbitrary setting of any collection of
  constructor parameters. The builder can verify that the collection
  of parameters is consistent before building an instance. This
  ensures that the initial state of an instance is dynamic and
  consistent.

https://www.oodesign.com/builder-pattern.html
https://jlordiales.me/2012/12/13/the-builder-pattern-in-practice/
https://www.youtube.com/watch?v=mFCk31FoUg4

https://en.wikipedia.org/wiki/Builder_pattern
http://stackoverflow.com/questions/328496/when-would-you-use-the-builder-pattern
