Boas práticas e padrões · Padrões comportamentais · 4 min de leitura
Strategy
Encapsula algoritmos intercambiáveis atrás de uma interface, escolhidos em tempo de execução.
Arraste para o lado para ver o diagrama inteiro.
O padrão
Define uma família de algoritmos, encapsula cada um e os torna intercambiáveis. É a aplicação mais direta do princípio aberto/fechado. Exemplos: cálculo de frete por transportadora, regras de desconto, formatos de exportação (CSV, PDF), compressão.
Funções como estratégia
Em Kotlin e TypeScript, uma estratégia muitas vezes é só uma função: Comparator, (Double) -> Double, fun interface. Use classe quando a estratégia tiver estado ou várias operações.
No código
type Ordenacao = (a: Produto, b: Produto) => number;
const ORDENACOES: Record<string, Ordenacao> = {
'menor-preco': (a, b) => a.preco - b.preco,
'mais-vendidos': (a, b) => b.vendas - a.vendas,
avaliacao: (a, b) => b.nota - a.nota || b.avaliacoes - a.avaliacoes,
};
function listar(produtos: Produto[], criterio: keyof typeof ORDENACOES) {
return [...produtos].sort(ORDENACOES[criterio]);
} Um novo critério é uma linha no mapa. O sort não muda, e o [...produtos] evita alterar a lista original.
Em resumo
- Algoritmos trocáveis atrás de uma interface.
- Substitui condicionais sobre "modo".
- Em linguagens modernas, muitas vezes é uma função.
- Cada estratégia é testada isoladamente.