O que é Strategy Pattern e quando usar?
Escrevi uns dias atrás um artigo falando sobre design patterns e seus tipos. Hoje vamos falar de Strategy Pattern do tipo Behavioral Patterns, que explora a forma como os objetos interagem e dividem responsabilidades entre si.
Vamos pensar em uma classe responsável por calcular o tempo que uma pessoa demorará para chegar a determinada distância dependendo do transporte utilizado.
Podemos perceber que teremos um if para cada tipo de transporte disponível e códigos com muitos ifs tendem a crescer e ficam muito complicados de entender.
Para deixar esse código mais legível o ideal seria:
- TransportationToAirport: será responsável por chamar qual meio de transporte for necessário sem conhecer a velocidade de cada transporte.
- Strategy: é uma interface onde será definido um “contrato” para todos os transportes
- Cada transporte implementará a interface “Strategy” e neste conterá a informações da sua velocidade.
Então o nosso código ficará assim:
O Strategy Pattern se propõe a resolver problemas exatamente como este, ou seja, permite que o algoritmo varie independentemente de quem o utilizará. Se precisarmos adicionar mais um meio de transporte não precisaremos mais criar ifs, apenas uma classe para esse novo meio, deixando o código mais limpo e com menos acoplamento.
No exemplo acima podemos encontrar códigos repetidos, que poderiam ser resolvidos com outro design pattern (template method pattern), mas vamos tratar este em outro artigo, aguarde :)