Strategy Pattern
Overview
Bem-vindos(as) a uma jornada pelo universo dos Design Patterns! Hoje, vamos mergulhar no fascinante Strategy Pattern, um conceito poderoso que permite ajustar o comportamento de um objeto conforme a necessidade. Imagine uma viagem do aeroporto à cidade, com diferentes meios de transporte à sua escolha: Ônibus, Carro Pessoal ou Táxi. Cada um desses transportes representa uma estratégia distinta, adaptada ao contexto do passageiro. Acompanhe-nos nesta exploração tecnicamente envolvente, repleta de exemplos práticos e código para ilustrar como você pode implementar o Strategy Pattern e otimizar seus projetos de software.
Neste design pattern, o comportamento da classe ou do seu algoritmo é modificado durante a execução. No Strategy Pattern, criamos objetos que podem possuir várias representações, cada uma com um comportamento diferente, de acordo com a estratégia adotada.
Um dos exemplos mais comuns para este tipo de Design Pattern é o das Notas Fiscais: Uma loja existe em diversos Estados do Brasil. Em qualquer uma delas, o cliente pode comprar alguma coisa e o procedimento (rotinas) de compra é o mesmo. A diferença vem apenas no calculo das Notas Fiscais. Supondo que o calculo seja igual para os Estados de MG, SP e SC, mas é diferente para o AC.
Neste caso, criamos uma interface que abstrai o procedimento de criação das compras e classes que implementam esta abstrações.
Considere a lista abaixo como um checklist de implantação do Strategy Pattern:
– Identifique o comportamento que inconstante (suscetível a mudanças) e o ponto em que este comportamento interage com o resto da aplicação;
– Crie as assinaturas dos métodos em uma interface;
– Implemente as diversas possibilidades de cada método (da interface) em classes diferentes;
– Quem consumir este método, deve tratar direto com a interface;
Exemplo Prático:
Passageiro vai escolher um transporte do Aeroporto até a cidade. Ele pode escolher entre Ônibus, Carro Pessoal ou Taxi, dependendo do tempo, dinheiro e conveniência que ele quer.
- Interface “Transporte”
public interface ITransporte {
void transportar(Cliente cli);
}
- Implemente as interfaces
class Onibus : ITransporte {
public void transportar(Cliente cli) {
//Transporta o cliente de onibus...
}
}
class Carro : ITransporte {
public void transportar(Cliente cli) {
//Transporta o cliente de Carro...
}
}
class Taxi : ITransporte {
public void transportar(Cliente cli) {
//Transporta o cliente de Taxi...
}
}
- Agora você deve definir como o código gerado com o Strategy Pattern vai ser implementado no seu sistema. Talvez com o padrão Builder ou Factory…