DEV Community

Bruno Mestres
Bruno Mestres

Posted on

Design Pattern - Strategy

Ultimamente tenho estudado bastante padrões de projetos, então resolvi escrever um pouco sobre alguns, e decidi começar pelo Strategy.

O Strategy é um padrão de projeto da categoria comportamental, que permite que você crie uma hierarquia de algoritmos, separando os objetos intercambiáveis em classes separadas.
Esse padrão é muito útil quando temos um código carregado de condições, ele permite que nosso código se adapte a diversas situações que venha acontecer posteriormente.

Digamos que tenham algumas regras de negocio para dar desconto em um Ecommerce, e ela varia dependendo de diversos fatores, como quantidade de produtos no carrinho, ou um determinado valor a ser batido, promoções e etc. Nesse caso a classe que representa o carrinho de compra teria que verificar cada uma dessas variantes com diversos IFS e aplicar o valor correto, e a medida que mais opções de desconto fosse adicionado na regra de negocio, teríamos que mexer na classe do carrinho, tornando o código cada vez mais difícil de se manter e aumentando a chance de criar bugs em códigos que já estavam funcionando.

O Strategy sugere que nesse caso, pegue a classe que tem diversos IFS e separe os códigos em outras classes separadas, chamadas de estratégias.

Na estrutura desse Padrão temos:
O contexto e a classe que contem o algoritmo com a lógica comum, ela vem carregada de condições.
A interface da Strategy, que define a função que as estratégias deverão executar.
E as estratégias que são os algoritmos específicos para cada situação que o código cliente chamar.

Image description

Top comments (0)