Intent - Separate the construction of a complex object
from its representation so that the same construction process
can create different representations. One class is responsible
for building products
Problem -
A class has a complicated internal structure, or order
dependent setters.
You have too many constructors in your class to support too many
possible ways to construct it.
The creation process uses resources or other objects that are
hard to create or obtain.
Solution - Use a Director class that is responsible for
building the parts of the product using different Builders.
Participants and Collaborators
Director
Builder
ConcreteBuilder
Product
Consequences
The Builder can coordinate order constrained creation, providing
fallbacks when necessary
The Builder can be a central point for resources needed
during creation (like database connections, files, etc). This
makes life much easier for clients of the Builder.