Strategy Pattern

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…