A analista Maria está desenvolvendo a funcionalidade C de uma aplicação, utilizando os padrões de projeto Gang of Four (GoF). Existem vários algoritmos, conhecidos e disponíveis, capazes de implementar a funcionalidade C. A aplicação deve deixar o usuário escolher qual algoritmo usar. Sendo assim, Maria decidiu aplicar na funcionalidade C o padrão GoF comportamental que modela algoritmos similares como objetos independentes, porém, passíveis de troca em tempo de execução. Maria decidiu aplicar o padrão GoF:
- A)Visitor;
Visitor não trata troca de algoritmos, mas sim operações novas sobre uma estrutura de objetos, geralmente sem alterar suas classes.
- B)Strategy;
Correta, porque Strategy encapsula algoritmos semelhantes em objetos separados e permite trocar a implementação em tempo de execução.
- C)Mediator;
Mediator coordena a comunicação entre objetos, centralizando interações, e não a escolha de algoritmos.
- D)Interpreter;
Interpreter é usado para representar e avaliar gramáticas ou linguagens, não para permitir que o usuário escolha entre algoritmos equivalentes.
- E)Template Method.
Template Method define o esqueleto de um algoritmo na superclasse, mas a variação ocorre por herança, não por troca livre de objetos em runtime.
Gabarito: B
A questão descreve um cenário clássico em que existem vários algoritmos para resolver o mesmo problema e a aplicação precisa deixar o usuário escolher qual deles será usado. Isso é praticamente a “assinatura” do padrão Strategy: ele encapsula uma família de algoritmos, torna cada um independente e permite que eles sejam trocados em tempo de execução sem bagunçar o restante do sistema. Pense assim: a funcionalidade continua sendo a mesma, mas a forma de executá-la muda conforme a necessidade. Em vez de encher a classe principal de if/else para cada algoritmo possível, você delega essa decisão para objetos diferentes, cada um representando uma estratégia. É por isso que o gabarito é a letra B. O GoF define Strategy como um padrão comportamental que “define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis”. Essa é exatamente a situação narrada no enunciado. Aqui não há estrutura de mensagens entre objetos, nem interpretação de linguagem, nem esqueleto fixo de algoritmo, nem visitante atravessando uma estrutura de objetos. É troca de algoritmo mesmo, com jeitinho elegante e sem drama.