Patterns: Strategy

Os design patterns, tem sido utilizados em grande escala atualmente. Eles são soluções prontas, para problemas já enfrentados anteriormente e que foram catalogados, para que venhamos fazer uso deles quando necessário. Estaremos falando sobre o patterns strategy, que visa encapsular uma família de algoritmos, e cada um ser utilizado em uma dada situação, sem causar impacto na aplicação existente.


    Design Patterns, atualmente tem sido muito difundidos, em virtude da busca por um código de melhor manutenção, que possibilite o reuso e no desejo de colocar em prática orientação a objetos de verdade. Design patterns não são novos, já existem há algum tempo,  são soluções prontas e catalogadas para resolução de determinados problemas. Devemos encarar os design patterns, como se fossem ferramentas em nossa caixa de ferramentas. Hoje veremos o pattern strategy, que visa encapsular famílias de algoritmos e definir uma estratégia para que sejam utilizados no momento certo. O conceito deste pattern segue abaixo:
      “Defina uma família de algoritmos, encapsule cada um, e torne-os intercambiáveis. Strategy permite que o algoritmo varie idependente dos clientes que o utilizam.”

     O Strategy é utilizado quando você tem um determinado algoritmo, rotina ou algo deste tipo, e que pode mudar em determinadas ocasiões. Suponhamos que você por exemplo tem uma classe de cálculo de juros e que em uma determinada data do ano, a taxa de juros diminui por conta de uma promoção. Então em cenários como este você, utilizaria o Strategy para auxiliar na solução desta demanda sem causar grande impacto para efetuar a mudança. Observe o diagrama do pattern abaixo:

 
 
 
    O Strategy como você pode ver, utiliza uma classe de contexto que faz referência a classe de estratégia, que pode ser uma interface ou classe abstrata.  Pelo fato da classe de contexto fazer referência a abstração da estratégia, qualquer classe que implemente a estratégia pode ser passada para a classe de contexto, ou seja, se em uma determinado momento eu precisar mudar a estratégia, basta apenas passar outra classe concreta que implemente a dada estratégia. Para entender melhor vejamos código. O Diagrama do exemplo:
 
 
 
    O Exemplo mostra como o strategy trabalha, classe de contexto( Tela de cadastro ), estratégia abstrata( Repositorio ) e stratégia concreta( RepositorioSQLServer OU RepositorioOracle ). Veja o código abaixo:
 
 
 
    Seguindo o exemplo do pattern, olhe abaixo:
 
 

Veja que o Form, faz referência a estratégia no caso a classe abstrata Repositorio( um pattern também), note que tem duas estratégias concretas, a RepositorioSQLServer e RepositorioOracle, e isto faz com que, caso mude o banco de dados, isto é transparente basta apenas mudar a estratégia concreta a ser passada para o form e pronto.  Os design patterns, nos auxiliam não só em problemas comuns já resolvidos, mais também tornar a manutenção e evolução mais transparente e fácil.

Bom pessoal vamos ficando por aqui, e espero que tenham gostado do artigo, e que vocês se aprofundem em conhecê-los; isto vai torná-los mais habeis na hora de resolver determinados problemas. Um abraço e até a próxima.
 

Artigos relacionados