Padrões de Projeto - Strategy
O padrão de projeto Strategy é um padrão comportamental que permite que você defina uma família de algoritmos, coloque-os em classes separadas e faça os objetos deles intercambiáveis.
Essencialmente, o padrão Strategy permite que você mude a estratégia ou o algoritmo que está sendo usado em tempo de execução. Ao invés de implementar um único algoritmo diretamente em uma classe, o comportamento é abstraído para um objeto de estratégia, que pode ser facilmente substituído por um algoritmo diferente.
Este padrão consiste em três componentes principais:
- Contexto: É a entidade que usa uma estratégia. Ele mantém uma referência a um objeto da estratégia e pode definir a interface pela qual a estratégia vai interagir.
- Estratégia (interface ou classe abstrata): Define uma interface comum a todas as estratégias suportadas. Essa interface é usada pelo contexto para chamar o algoritmo definido pela estratégia concreta.
- Estratégias Concretas: Estas são implementações diferentes da estratégia. Eles implementam a interface da estratégia e definem o algoritmo que será usado pelo contexto.
Considere que você esteja construindo um simulador de tráfego e que diferentes veículos tenham diferentes comportamentos de freio. Alguns podem ter freio a disco, alguns podem ter freios ABS e outros, freios a tambor. Em vez de codificar cada comportamento de freio em cada veículo, você pode usar o padrão Strategy para separar esse comportamento em uma classe de estratégia separada.
Com o padrão Strategy, se quiser adicionar um novo tipo de freio no futuro, basta adicionar uma nova classe de estratégia. Isso é uma forma de aderir ao princípio de projeto SOLID chamado "Princípio Aberto-Fechado", que afirma que "As entidades de software (classes, módulos, funções, etc.) devem ser abertas para extensão, mas fechadas para modificação". Assim, não é necessário alterar a classe do veículo sempre que um novo comportamento de freio é adicionado.
