Padrões de Projeto (Design Patterns)
Gabarito: letra D. O padrão Observer é a solução ideal para cenários em que um objeto (sujeito) precisa notificar automaticamente múltiplos dependentes (observadores) sobre mudanças em seu estado, sem que eles precisem ficar consultando a fonte. No caso descrito, a fonte de dados é o sujeito; o gráfico e a planilha são os observadores que devem refletir as alterações de forma automática e assíncrona. Esse é o propósito clássico do padrão comportamental Observer.
A questão testa a capacidade de associar um problema típico de design ao padrão GoF adequado. Vamos analisar por que cada alternativa não se aplica ou, no caso da correta, se encaixa perfeitamente.
Alternativa A — ❌ Incorreta
Chain of Responsibility é um padrão comportamental que permite passar uma solicitação ao longo de uma cadeia de handlers, onde cada um decide se processa ou encaminha a requisição. Não há relação com notificação automática de mudanças de estado; seu foco é desacoplar remetente e destinatário em uma sequência de tratamento.
Alternativa B — ❌ Incorreta
Adapter é um padrão estrutural que converte a interface de uma classe em outra interface esperada pelo cliente, permitindo que classes incompatíveis trabalhem juntas. Não trata de atualização automática de dependentes; apenas adapta interfaces.
Alternativa C — ❌ Incorreta
Factory Method é um padrão de criação que define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar. Não resolve o problema de notificação de mudanças; é usado para encapsular a lógica de criação de objetos.
Alternativa D — ✅ Correta ⟵ GABARITO
Observer (ou Publisher-Subscriber) é um padrão comportamental no qual um objeto (Subject) mantém uma lista de dependentes (Observers) e os notifica automaticamente quando seu estado muda. O problema apresentado — um gráfico e uma planilha que devem repercutir alterações na fonte de dados — é um caso de uso clássico desse padrão. A comunicação assíncrona também é compatível, pois o Subject pode disparar notificações sem esperar que os Observers terminem seu processamento.
Alternativa E — ❌ Incorreta
Front Controller é um padrão arquitetural (não do catálogo GoF comportamental) que concentra o tratamento de todas as requisições em um único controlador, centralizando lógicas como autenticação e roteamento. Não se aplica à notificação de mudanças de dados entre componentes internos.
Padrão | Categoria | Propósito | Relação com o problema |
|---|
Chain of Responsibility | Comportamental | Passar requisição por uma cadeia | ❌ Não notifica dependentes |
Adapter | Estrutural | Adaptar interfaces | ❌ Foco em compatibilidade |
Factory Method | Criação | Criar objetos sem especificar classe concreta | ❌ Não trata notificação |
Observer | Comportamental | Notificar dependentes sobre mudanças | ✅ Solução direta |
Front Controller | Arquitetural | Centralizar requisições | ❌ Não é notificação |
Gabarito: letra D — Observer.