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! 🚀

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more