Builder

Descrição:

O padrão de projeto Builder encapsula a construção de um produto e permite que sua criação seja feita passo-a-passo. Assim, é possível construir objetos compostos a partir dos objetos-parte que o compõem.

Diagrama de Classes genérico do padrão:

Builder

Exemplo:

Suponha que um programa de planejamento de férias deva ser criado. Esse programa deverá possibilitar adicionar dias no planejamento, e as atividades ou reservas que serão feitas em tal dia. Como essas atividades podem ser muito abrangentes, é interessante construi-las separadamente e depois agregá-las à composição do plano.

As atividades disponíveis para serem adicionadas a um dia do plano são:

Para atingir essa tarefa, um Builder é ideal. Cria-se então uma classe abstrata AbstractBuilder, que permitirá vários Builders serem herdados com a mesma finalidade, mesmo que com implementações diversas.

Cada método do AbstractBuilder se encarregará de construir uma parte do plano total:

Nessa situação, apenas um Builder concreto é necessário, então define-se o VacationBuilder. A implementação de cada um dos métodos definidos acima agregará a atividade ao plano planner, e o método get_vacation_planner() o retornará ao fim de toda a construção para o cliente.

Diagrama de Classes do exemplo:

Imagem do Exemplo sobre Builder no livro

Ver código fonte no Github