Separate the construction of a complex object from its representation, allowing the same construction process to create various representations.
π‘ Useful when you need to create objects that have many different working parts that need to all come together to create one single object.
- Allows you to vary a product's internal representation
- Encapsulates code for construction and representation
- Provides control over steps of construction process
- It does create more code
- Too many constructors to maintain
- Error prone because many fields has same type