главная/PHP Паттерн Стратегия
PHP - паттерн стратегия

PHP Паттерн Стратегия

Паттерн Стратегия (Strategy Pattern) — это поведенческий шаблон проектирования, который определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми.

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

Компоненты паттерна Стратегия:

  • Context (Контекст) — Класс, который использует определенную стратегию. Обычно он содержит ссылку на один из вариантов стратегии и может иметь метод для её изменения во время выполнения.
  • Strategy (Стратегия) — Интерфейс, который определяет семейство взаимозаменяемых алгоритмов. Обычно он определяет метод, который будет реализован всеми конкретными стратегиями.
  • Concrete Strategies (Конкретные Стратегии) — Классы, которые реализуют различные вариации алгоритма, следуя интерфейсу стратегии.

Пример

Допустим, вы разрабатываете систему для расчёта налогов с продаж. Вы можете использовать паттерн Стратегия для определения различных налоговых ставок в зависимости от страны или региона.

// Интерфейс Стратегии
interface TaxStrategy {
    public function calculateTax($amount);
}

// Конкретная Стратегия для США
class USTaxStrategy implements TaxStrategy {
    public function calculateTax($amount) {
        return $amount * 0.07; // Простой пример налога
    }
}

// Конкретная Стратегия для ЕС
class EUTaxStrategy implements TaxStrategy {
    public function calculateTax($amount) {
        return $amount * 0.20; // Другая ставка налога
    }
}

// Контекст
class SalesOrder {
    private $strategy;

    public function __construct(TaxStrategy $strategy) {
        $this->strategy = $strategy;
    }

    public function calculateTax($amount) {
        return $this->strategy->calculateTax($amount);
    }
}

// Клиентский код
$orderUS = new SalesOrder(new USTaxStrategy());
echo $orderUS->calculateTax(100); // Расчёт налога в США

$orderEU = new SalesOrder(new EUTaxStrategy());
echo $orderEU->calculateTax(100); // Расчёт налога в ЕС
  • TaxStrategy — это интерфейс, который определяет метод calculateTax().
  • USTaxStrategy и EUTaxStrategy — это конкретные реализации этого интерфейса для разных регионов.
  • SalesOrder — это контекст, который использует стратегию. Он не зависит от конкретных алгоритмов налогообложения и может работать с любой стратегией, поданной в конструкторе.