DEV Community

Arthur Freitas
Arthur Freitas

Posted on

Domine o Design Pattern Strategy: Simplifique Seus Códigos!

Simplificando o Desenvolvimento com o Design Pattern Strategy

Olá, Devs! 👋 Hoje, vamos mergulhar em um dos conceitos mais transformadores no mundo da programação: o Design Pattern Strategy, e vamos explorar como aplicá-lo de maneira eficaz usando TypeScript.

Entendendo o Design Pattern Strategy 🧠

O Design Pattern Strategy é um padrão comportamental que nos permite definir uma família de algoritmos, encapsulá-los como objetos e torná-los intercambiáveis. A beleza desse padrão está em sua capacidade de permitir que o algoritmo mude independentemente dos clientes que o utilizam.

Por Que Strategy É Um Game-Changer? 🚀

  • Flexibilidade: Troque algoritmos sem mexer no código cliente.
  • Desacoplamento: Separa o que faz de como faz.
  • Manutenibilidade: Facilita significativamente a expansão e manutenção dos algoritmos.

Demonstração Prática com TypeScript 📝

Imagine um cenário: uma loja online precisa aplicar diferentes estratégias de desconto com base no tipo de cliente. Vamos ver como o Strategy Pattern pode simplificar isso:

1. Definindo a Interface de Estratégia

Primeiro, criamos uma interface para nossas estratégias de desconto:

interface DiscountStrategy {
  applyDiscount(amount: number): number;
}
Enter fullscreen mode Exit fullscreen mode

Passo 2: Implementar Estratégias Concretas

Agora, implementamos estratégias de desconto específicas:

class NoDiscount implements DiscountStrategy {
  applyDiscount(amount: number): number {
    return amount;
  }
}

class SeasonalDiscount implements DiscountStrategy {
  applyDiscount(amount: number): number {
    return amount * 0.9; // 10% de desconto
  }
}

class LoyaltyDiscount implements DiscountStrategy {
  applyDiscount(amount: number): number {
    return amount * 0.8; // 20% de desconto
  }
}
Enter fullscreen mode Exit fullscreen mode

Passo 3: Contexto para Utilizar Estratégias

Criamos um contexto que utiliza uma estratégia de desconto:

class DiscountContext {
  private strategy: DiscountStrategy;

  constructor(strategy: DiscountStrategy) {
    this.strategy = strategy;
  }

  setStrategy(strategy: DiscountStrategy) {
    this.strategy = strategy;
  }

  calculate(amount: number): number {
    return this.strategy.applyDiscount(amount);
  }
}
Enter fullscreen mode Exit fullscreen mode

Passo 4: Aplicar Estratégias

Por fim, aplicamos diferentes estratégias de desconto baseadas na necessidade:

const discountContext = new DiscountContext(new NoDiscount());
console.log(discountContext.calculate(100)); // Sem desconto: 100

discountContext.setStrategy(new SeasonalDiscount());
console.log(discountContext.calculate(100)); // Desconto sazonal: 90

discountContext.setStrategy(new LoyaltyDiscount());
console.log(discountContext.calculate(100)); // Desconto de fidelidade: 80
Enter fullscreen mode Exit fullscreen mode

Conclusão

Com este simples exemplo, você pode ver como o Design Pattern Strategy permite a flexibilidade e a expansão de seus códigos de maneira limpa e organizada.

Palavras-chave: Design Pattern Strategy, TypeScript, Padrões de Projeto, Flexibilidade de Código, Desacoplamento, Manutenibilidade, Estratégias de Desconto, Práticas de Codificação.

Espero que este post tenha esclarecido o padrão Strategy e como implementá-lo em TypeScript. Até a próxima, Devs! 🚀

Top comments (0)