Padrões de projeto: Strategy

camilaferreiranas

Camila Ferreira

Posted on November 9, 2024

Padrões de projeto: Strategy

Padrões de projeto, ou design patterns, são soluções bem definidas e testadas para resolver problemas comuns no desenvolvimento de software. Eles promovem boas práticas, facilitando a comunicação e o reaproveitamento de soluções entre desenvolvedores e melhorando a manutenibilidade e a eficiência do código.

O Strategy é um padrão de projeto comportamental, o que significa que ele facilita a comunicação entre objetos e organiza a troca de informações. Com o Strategy, podemos definir uma família de algoritmos, encapsulá-los em classes distintas e torná-los intercambiáveis. Isso torna o padrão ideal quando há várias maneiras de realizar uma tarefa específica, como implementar diferentes formas de pagamento em uma aplicação. Dessa forma, podemos selecionar a estratégia de pagamento sem alterar a estrutura principal da aplicação, respeitando o princípio de aberto/fechado do SOLID e reduzindo o uso de condicionais.

Exemplo prático em Java
No exemplo abaixo, implementamos um sistema de pagamento que permite ao usuário escolher entre cartão de crédito ou PayPal. A classe ShoppingCart aceita diferentes estratégias de pagamento, aplicando o padrão Strategy para simplificar e organizar a lógica.

`public interface PaymentStrategy {
void pay(double amount);
}

public class CreditCardPayment implements PaymentStrategy {
private String cardNumber;
private String cardHolder;

public CreditCardPayment(String cardNumber, String cardHolder) {
    this.cardNumber = cardNumber;
    this.cardHolder = cardHolder;
}

@Override
public void pay(double amount) {
    System.out.println("Pagando " + amount + " com cartão de crédito.");
}
Enter fullscreen mode Exit fullscreen mode

}

public class PayPalPayment implements PaymentStrategy {
private String email;

public PayPalPayment(String email) {
    this.email = email;
}

@Override
public void pay(double amount) {
    System.out.println("Pagando " + amount + " com PayPal.");
}
Enter fullscreen mode Exit fullscreen mode

}

public class ShoppingCart {
private PaymentStrategy paymentStrategy;

public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
    this.paymentStrategy = paymentStrategy;
}


public void checkout(double amount) {
    paymentStrategy.pay(amount);
}
Enter fullscreen mode Exit fullscreen mode

}
`

A interface PaymentStrategy ** define um método de pagamento genérico.
As classes *CreditCardPayment * e **PayPalPayment
implementam essa interface, cada uma encapsulando a lógica de pagamento específica.
A classe ShoppingCart permite definir e trocar a estratégia de pagamento, chamando o método de pagamento da estratégia escolhida.
Esse exemplo ilustra como o padrão Strategy simplifica a adição de novos métodos de pagamento e facilita o entendimento do código, eliminando condicionais e promovendo a reutilização e o princípio de responsabilidade única.
O padrão Strategy é uma poderosa ferramenta para estruturar o código de forma flexível, extensível e fácil de manter. Ele permite adicionar novas estratégias sem alterar o código existente, promovendo a reutilização e facilitando a adaptação do sistema a novos requisitos. No exemplo da aplicação de pagamento, o Strategy simplificou a escolha de métodos de pagamento, organizando as lógicas em classes separadas e deixando o código mais limpo e modular. Esse padrão reduz a necessidade de condicionais, favorece a aplicação dos princípios SOLID e proporciona uma arquitetura que cresce de maneira organizada. Em resumo, o uso do Strategy traz vantagens práticas e contribui para a robustez e escalabilidade do software.

💖 💪 🙅 🚩
camilaferreiranas
Camila Ferreira

Posted on November 9, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Command Pattern
design Command Pattern

November 28, 2024

Master Cloud Patterns for Stability
devops Master Cloud Patterns for Stability

November 26, 2024

Padrões de projeto: Builder
designpatterns Padrões de projeto: Builder

November 23, 2024