"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Compreendendo o padrão de design de estratégia em Java

Compreendendo o padrão de design de estratégia em Java

Publicado em 2024-08-21
Navegar:652

Understanding the Strategy Design Pattern in Java

Compreendendo o padrão de design de estratégia em Java

Problema

O padrão Strategy atende à necessidade de definir uma família de algoritmos, encapsular cada um deles e torná-los intercambiáveis. Esse padrão permite que o algoritmo varie independentemente dos clientes que o utilizam. É útil quando você tem várias maneiras de executar uma tarefa específica e deseja escolher o algoritmo em tempo de execução.

Solução

O padrão Estratégia envolve três componentes principais:

  1. Contexto: O objeto que contém uma referência a um objeto de estratégia e a utiliza para executar o algoritmo.
  2. Estratégia: Uma interface comum a todos os algoritmos suportados. O contexto utiliza esta interface para chamar o algoritmo definido por uma estratégia concreta.
  3. Estratégia Concreta: Classes que implementam a interface da estratégia, fornecendo algoritmos específicos.

O contexto delega a execução do algoritmo ao objeto de estratégia, o que permite que o algoritmo seja selecionado em tempo de execução.

Prós e Contras

Prós

  • Encapsulamento de algoritmos: Cada algoritmo é encapsulado em sua própria classe, facilitando a alternância entre eles e a adição de novos algoritmos sem alterar o contexto.
  • Princípio de Responsabilidade Única: A classe de contexto é simplificada, pois delega a implementação do algoritmo para classes de estratégia.
  • Princípio Aberto/Fechado: Novas estratégias podem ser introduzidas sem alterar o contexto existente ou as classes de estratégia.

Contras

  • Aumento do número de classes: O padrão aumenta o número de classes na base de código devido à criação de novas classes de estratégia para cada algoritmo.
  • Complexidade nas estratégias de comutação: Se não for bem gerenciada, a alternância de estratégias dinamicamente em tempo de execução pode introduzir complexidade e possíveis erros.

Exemplo de aplicação no mundo real

Um exemplo prático do padrão Estratégia está em um sistema de processamento de pagamentos onde diferentes métodos de pagamento (por exemplo, cartão de crédito, PayPal, transferência bancária) são implementados como estratégias diferentes. O cliente pode escolher a estratégia de pagamento apropriada em tempo de execução.

Código de exemplo em Java

Padrão de estratégia no código:

java
// Strategy Interface
public interface PaymentStrategy {
    void pay(int amount);
}

// Concrete Strategy 1
public class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;

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

    @Override
    public void pay(int amount) {
        System.out.println(amount   " paid with credit card "   cardNumber);
    }
}

// Concrete Strategy 2
public class PayPalPayment implements PaymentStrategy {
    private String email;

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

    @Override
    public void pay(int amount) {
        System.out.println(amount   " paid using PayPal account "   email);
    }
}

// Context
public class ShoppingCart {
    private PaymentStrategy paymentStrategy;

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

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

// Client code
public class Client {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9876-5432"));
        cart.checkout(100);

        cart.setPaymentStrategy(new PayPalPayment("[email protected]"));
        cart.checkout(200);
    }
}
Declaração de lançamento Este artigo está reproduzido em: https://dev.to/diegosilva13/understanding-the-strategy-design-pattern-in-java-3ah4?1 Se houver alguma infração, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3