Strategy

Definição

O padrão Strategy define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis. O algoritmo pode variar independentemente do cliente que o utiliza.

Esse padrão é útil quando você tem várias formas diferentes de executar uma tarefa, e quer poder alternar entre elas em tempo de execução, sem alterar o código que usa a lógica.

Por que é importante

O padrão Strategy define uma família de algoritmos encapsulados, que podem ser trocados livremente em tempo de execução, sem alterar o código que os utiliza. Também ajuda a eliminar estruturas condicionais (como if/elif) repetitivas e torna o sistema mais modular e extensível.

Esse padrão é ideal para regras de cálculo, validações, formatações ou qualquer situação em que o comportamento deva poder variar de forma controlada.

Exemplo prático (Python)

Imagine um sistema de cálculo de frete que pode usar diferentes estratégias de transporte:

from abc import ABC, abstractmethod

# Estratégia base
class EstrategiaFrete(ABC):
    @abstractmethod
    def calcular(self, peso):
        pass

# Estratégias concretas
class FreteExpresso(EstrategiaFrete):
    def calcular(self, peso):
        return 30 + peso * 1.5

class FretePadrao(EstrategiaFrete):
    def calcular(self, peso):
        return 20 + peso * 1.0

class FreteEconomico(EstrategiaFrete):
    def calcular(self, peso):
        return 10 + peso * 0.8

# Contexto
class CalculadoraDeFrete:
    def __init__(self, estrategia: EstrategiaFrete):
        self.estrategia = estrategia

    def calcular(self, peso):
        return self.estrategia.calcular(peso)

Agora podemos alternar entre as estratégias sem mudar a lógica da calculadora:

peso = 5

calculadora = CalculadoraDeFrete(FretePadrao())
print("Padrão:", calculadora.calcular(peso))

calculadora = CalculadoraDeFrete(FreteExpresso())
print("Expresso:", calculadora.calcular(peso))

calculadora = CalculadoraDeFrete(FreteEconomico())
print("Econômico:", calculadora.calcular(peso))

O cliente (a calculadora) não precisa saber os detalhes de cada cálculo. Ele apenas usa a estratégia definida no momento da execução. Se uma nova estratégia de frete surgir no futuro, basta implementá-la como uma nova classe sem alterar o código da calculadora — respeitando o princípio aberto/fechado.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com