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…


This content originally appeared on DEV Community and was authored by Camila Ferreira

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.");
}

}

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.");
}

}

public class ShoppingCart {
private PaymentStrategy paymentStrategy;

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


public void checkout(double amount) {
    paymentStrategy.pay(amount);
}

}
`

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.


This content originally appeared on DEV Community and was authored by Camila Ferreira


Print Share Comment Cite Upload Translate Updates
APA

Camila Ferreira | Sciencx (2024-11-09T22:14:25+00:00) Padrões de projeto: Strategy. Retrieved from https://www.scien.cx/2024/11/09/padroes-de-projeto-strategy/

MLA
" » Padrões de projeto: Strategy." Camila Ferreira | Sciencx - Saturday November 9, 2024, https://www.scien.cx/2024/11/09/padroes-de-projeto-strategy/
HARVARD
Camila Ferreira | Sciencx Saturday November 9, 2024 » Padrões de projeto: Strategy., viewed ,<https://www.scien.cx/2024/11/09/padroes-de-projeto-strategy/>
VANCOUVER
Camila Ferreira | Sciencx - » Padrões de projeto: Strategy. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/11/09/padroes-de-projeto-strategy/
CHICAGO
" » Padrões de projeto: Strategy." Camila Ferreira | Sciencx - Accessed . https://www.scien.cx/2024/11/09/padroes-de-projeto-strategy/
IEEE
" » Padrões de projeto: Strategy." Camila Ferreira | Sciencx [Online]. Available: https://www.scien.cx/2024/11/09/padroes-de-projeto-strategy/. [Accessed: ]
rf:citation
» Padrões de projeto: Strategy | Camila Ferreira | Sciencx | https://www.scien.cx/2024/11/09/padroes-de-projeto-strategy/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.