«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Понимание шаблона проектирования стратегии в Java

Понимание шаблона проектирования стратегии в Java

Опубликовано 21 августа 2024 г.
Просматривать:879

Understanding the Strategy Design Pattern in Java

Понимание шаблона проектирования стратегии в Java

Проблема

Шаблон «Стратегия» учитывает необходимость определить семейство алгоритмов, инкапсулировать каждый из них и сделать их взаимозаменяемыми. Этот шаблон позволяет алгоритму изменяться независимо от клиентов, которые его используют. Это полезно, когда у вас есть несколько способов выполнить определенную задачу и вы хотите выбрать алгоритм во время выполнения.

Решение

Шаблон стратегии включает в себя три основных компонента:

  1. Контекст: Объект, который содержит ссылку на объект стратегии и использует его для выполнения алгоритма.
  2. Стратегия: Интерфейс, общий для всех поддерживаемых алгоритмов. Контекст использует этот интерфейс для вызова алгоритма, определенного конкретной стратегией.
  3. Конкретная стратегия: Классы, реализующие интерфейс стратегии и предоставляющие конкретные алгоритмы.

Контекст делегирует выполнение алгоритма объекту стратегии, что позволяет выбирать алгоритм во время выполнения.

Плюсы и минусы

Плюсы

  • Инкапсуляция алгоритмов: Каждый алгоритм инкапсулирован в отдельный класс, что позволяет легко переключаться между ними и добавлять новые алгоритмы без изменения контекста.
  • Принцип единой ответственности: Класс контекста упрощен, поскольку он делегирует реализацию алгоритма классам стратегии.
  • Принцип открытости/закрытости: Новые стратегии можно внедрять без изменения существующего контекста или классов стратегий.

Минусы

  • Увеличенное количество классов: Шаблон увеличивает количество классов в кодовой базе за счет создания новых классов стратегии для каждого алгоритма.
  • Сложность стратегии переключения: Если не управлять ею должным образом, динамическое переключение стратегий во время выполнения может привести к сложности и потенциальным ошибкам.

Пример реального применения

Практический пример шаблона «Стратегия» — система обработки платежей, где разные способы оплаты (например, кредитная карта, PayPal, банковский перевод) реализованы как разные стратегии. Клиент может выбрать подходящую стратегию оплаты во время выполнения.

Пример кода на Java

Шаблон стратегии в коде:

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);
    }
}
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/diegosilva13/understanding-the-strategy-design-pattern-in-java-3ah4?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3