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…
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022