O Builder é um padrão de projeto criacional, que permite a construção de objetos complexos passo a passo.
Diferente de outros padrões de criação, o Builder não exige que os produtos tenham uma interface comum. Isso torna possível produzir produtos diferentes usando o mesmo processo de construção.
O padrão Builder também é usado quando o produto desejado é complexo e requer várias etapas para ser concluído. Nesse caso, vários métodos de construção seriam mais simples do que um único construtor monstruoso. O problema potencial com o processo de construção de vários estágios é que um produto parcialmente construído e instável pode ser exposto ao cliente. O padrão Builder mantém o produto privado até que seja totalmente construído.
No código abaixo, vemos diferentes tipos de casas (igloo e normalHouse) sendo construídas por iglooBuilder e normalBuilder. Cada tipo de casa tem as mesmas etapas de construção. A struct opcional diretor ajuda a organizar o processo de construção.