Padrão de Projeto Visitor
Gabarito: letra D. A descrição fornecida no enunciado — "Utiliza uma classe específica para mudar o algoritmo que executa em uma classe elemento. Desta forma, o algoritmo que executa no elemento pode variar como e quando esta classe específica, que define o nome do padrão, variar também" — corresponde exatamente ao padrão Visitor (Visitante). O Visitor é um padrão comportamental que permite separar um algoritmo da estrutura de objetos sobre a qual ele opera, adicionando novas operações sem modificar as classes dos elementos. A classe que contém o algoritmo é justamente o Visitor, e diferentes visitors implementam diferentes algoritmos.
Padrão de Projeto | Categoria | Descrição Principal | Relação com o Enunciado |
|---|
Visitor | Comportamental | Permite separar um algoritmo da estrutura de objetos sobre a qual ele opera, adicionando novas operações sem modificar as classes dos elementos. | ✅ Corresponde exatamente. Utiliza uma classe específica (Visitor) para mudar o algoritmo que executa em uma classe elemento. |
Observer | Comportamental | Define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, todos seus dependentes são notificados. | ❌ Não se encaixa. Não envolve variar o algoritmo de um elemento através de uma classe específica. |
Null Object | Comportamental | Fornece um objeto com comportamento neutro (sem efeito) para substituir referências nulas. | ❌ Não se encaixa. Não envolve a variação de algoritmos em elementos. |
Facade | Estrutural | Fornece uma interface simplificada para um conjunto de interfaces de um subsistema. | ❌ Não se encaixa. Não é comportamental e não altera algoritmos em elementos. |
Flyweight | Estrutural | Usa compartilhamento para suportar grandes quantidades de objetos de granularidade fina de forma eficiente. | ❌ Não se encaixa. Não é comportamental e não está relacionado à variação de algoritmos. |
Alternativa A — ❌ Incorreta
Observer (Observador) é um padrão comportamental que define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, todos seus dependentes são notificados. Não se encaixa na descrição de variar o algoritmo de um elemento através de uma classe específica.
Alternativa B — ❌ Incorreta
Null Object (Objeto Nulo) é um padrão que fornece um objeto com comportamento neutro (sem efeito) para substituir referências nulas. Ele não envolve a variação de algoritmos em elementos.
Alternativa C — ❌ Incorreta
Facade (Fachada) é um padrão estrutural que fornece uma interface simplificada para um conjunto de interfaces de um subsistema. Não está na categoria comportamental e não altera algoritmos em elementos.
Alternativa D — ✅ Correta ⟵ GABARITO
Visitor (Visitante) é exatamente o padrão descrito. Ele permite definir novas operações sobre uma estrutura de objetos sem modificar as classes desses objetos. A operação é encapsulada em uma classe visitor, e diferentes visitors implementam diferentes algoritmos. A frase "o algoritmo que executa no elemento pode variar como e quando esta classe específica variar" reflete a essência do Visitor.
Alternativa E — ❌ Incorreta
Flyweight (Peso-leve) é um padrão estrutural que usa compartilhamento para suportar grandes quantidades de objetos de granularidade fina de forma eficiente. Não é comportamental e não está relacionado à variação de algoritmos.
Gabarito: letra D.