Шаблон «Стратегия» учитывает необходимость определить семейство алгоритмов, инкапсулировать каждый из них и сделать их взаимозаменяемыми. Этот шаблон позволяет алгоритму изменяться независимо от клиентов, которые его используют. Это полезно, когда у вас есть несколько способов выполнить определенную задачу и вы хотите выбрать алгоритм во время выполнения.
Шаблон стратегии включает в себя три основных компонента:
Контекст делегирует выполнение алгоритма объекту стратегии, что позволяет выбирать алгоритм во время выполнения.
Практический пример шаблона «Стратегия» — система обработки платежей, где разные способы оплаты (например, кредитная карта, PayPal, банковский перевод) реализованы как разные стратегии. Клиент может выбрать подходящую стратегию оплаты во время выполнения.
Шаблон стратегии в коде:
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); } }
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3