The Builder pattern separates the construction of a complex object from its representation. This allows the same construction process to create different representations of the object.
The Director defines the order and steps to build the product. It uses the Builder interface but does not create the product directly.
Using separate Concrete Builders for each variant keeps construction logic isolated and makes the system easier to maintain and extend.
The Builder pattern adds extra classes which can increase complexity, but this tradeoff allows flexible and clear construction of complex objects.
The client starts the process by calling the Director. The Director then calls Builder methods in order. The Builder assembles parts and stores state. Finally, the Director gets the product and returns it to the client.