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.