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.
O padrão Estratégia envolve três componentes principais:
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.
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.
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); } }
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