Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Strategy - Dúvida sobre desvantagem do pattern

Olá,

Eu entendi que o strategy oferece a possibilidade de alterar comportamentos que variam em tempo de execução e que aumenta a reusabilidade do meu código que agora tem os comportamentos que variam encapsulados em classes(ou funções), mas o cliente que usar o strategy deve conhecer como essas estrategias diferem, então um cliente que usar várias estratégias não teria os if's do mesmo jeito?

3 respostas
solução!

Oi Eliakin!

Sim, mas não como você esta pensando. Vamos lá...

Eu tenho a classe A que aceita uma estratégia. Ela é usada pelas classes W, X, Y. Se eu colocar um IF dentro de A e as classes W, X, Y passarem uma string para escolherem que estratégia utilizar, matou o estrategy! Porque eu tenho que alterar a classe A e adicionar um IF para atender W,X,Y. Se uma nova classe aparecer, por exemplo, Z.. eu terei que colocar mais um IF em A! Veja que para cada cliente eu terei que alterar A!

Agora, se W vai usar essa ou aquela estratégia, é W tem deve decidir...fazendo IF ou não, que isso não terá impacto em A. Aliás, como A é usada em vários lugares, não há o risco de adicionar um efeito colateral nela, a não ser no próprio W.. se passar a estratégia errada ou tiver algum erro. A mesma coisa de Y... se ela precisar escolher entre 3 estratégias para passar para A.. esse código com IF ou seja lá o que for ficará apenas em Y... e como não alterada A, não corre o risco de quebrar A que por conseguinte não corre risco de quebrar tocas as outras classes que fazem uso dela.

Uma estrutura de decisão para decidir qual estratégia será passada para A vai sempre existir, o importante é que nunca seja em A. A só recebe a estratégia,

Obrigado Flavio, ficou mais clara a motivação e real ganho em utilizar o strategy.

Abraço :)

Sucesso e bom estudo!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software