Marcos está efetuando a manutenção de um sistema e notou que em diversos pontos são efetuadas chamadas HTTP para diferentes servidores, utilizando configurações específicas. Ele resolveu refatorar o código, criando uma classe que oferece métodos para cada elemento da configuração, os quais podem ser combinados para gerar um conector personalizado para cada servidor acessado. Adotando essa abordagem, Marcos aumentou o reuso de processos intermediários na construção de objetos complexos, de acordo com o padrão:
- A)Singleton;
Singleton é para garantir uma única instância da classe, não para montar objetos complexos por etapas.
- B)Mediator;
Mediator centraliza a comunicação entre objetos, mas não trata da construção personalizada de objetos.
- C)Builder;
Builder é o padrão correto, pois permite construir objetos complexos passo a passo com reuso dos processos intermediários.
- D)Observer;
Observer trata de notificação entre objetos quando um estado muda, e não de montagem de configurações.
- E)Chain of Responsibility.
Chain of Responsibility passa uma requisição por uma cadeia de manipuladores, sem foco na construção de um objeto final.
Gabarito: C
A questão descreve um cenário em que você precisa montar objetos complexos a partir de partes/configurações menores, permitindo combinar etapas de construção para criar uma versão personalizada para cada servidor. Isso é a cara do padrão Builder: separar a forma de construir do objeto final, facilitando reuso dos passos intermediários e deixando a montagem mais organizada. No Builder, em vez de ter um construtor gigante e cheio de parâmetros, você cria uma classe ou conjunto de métodos que vão montando o objeto passo a passo. Assim, o mesmo processo de construção pode gerar variações diferentes do produto final. É exatamente o que o enunciado fala quando menciona "métodos para cada elemento da configuração" que podem ser combinados. Na prática, isso aparece muito quando a criação do objeto exige várias configurações opcionais ou uma sequência de montagem mais trabalhosa. O ganho é clareza, reutilização e menor acoplamento entre quem monta e o que é montado. Em concursos, quando o texto fala em construção de objetos complexos com etapas reaproveitáveis, desconfie de Builder quase automaticamente. Por isso, o gabarito C está correto: o padrão Builder é usado para construir um objeto complexo passo a passo, reaproveitando processos intermediários de montagem e permitindo configurações diferentes para cada necessidade.