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:

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:
- Hotel de estadia (Hotel)
- Reserva de atividades (Reservation)
- Bilhetes de atividades (Tickets)
- Participação em Eventos Especiais (SpecialEvents)
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:
- build_day(): adiciona um novo dia ao plano
- add_hotel(): adiciona o nome de um hotel ao plano de um devido dia
- add_reservation(), add_tickets(), e add_special_event() adicionam todos os outros tipos de atividade ao plano de um devido dia
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:

