Пример стратегии на PHP

154
05 января 2022, 09:00

Здесь приведён пример стратегии на PHP: https://refactoring.guru/ru/design-patterns/strategy/php/example#example-1

Вопрос в следующем: Почему в этом примере нет класса, хранящего ссылку на класс стратегию (на класс, реализующий PaymentMethod), как это описано в этом же разделе? Правильная ли это реализация данного паттерна?

Answer 1

Пример честно говоря запутанный и неудачный. Там реализация сразу и фабрики, и стратегии. Посмотрите лучше на другом ресурсе другие реализации этого паттерна.

Причем как я понял обе стратегии не используются.

В чем там алгоритм:

1) Смотрите на метод get контроллера, а нем происходит работа роутера - по регулярному выражению находится метод оплаты:

$controller->get("/order/1/payment/paypal"); - это стратегия для пайпала
$controller->get("/order/1/payment/сс"); - это стратегия для карты (в примере почему то этого нет)

2) Дальше идет поиск метода оплаты:

preg_match('#^/order/([0-9]+?)/payment/([a-z]+?)(/return)?$#', $path, $matches)
// Способ оплаты (стратегия) выбирается в соответствии со значением,
// переданным в запросе.
$paymentMethod = PaymentFactory::getPaymentMethod($matches[2]); 
$matches[2] будет равно или 'paypal' или 'cc'
$paymentMethod - это как раз реализация PaymentMethod interface
READ ALSO
Почему возникает ошибка "PHP Fatal error: Uncaught Error: Class '...' not found in ..." при загрузке библиотеки через Composer?

Почему возникает ошибка "PHP Fatal error: Uncaught Error: Class '...' not found in ..." при загрузке библиотеки через Composer?

Написал (но и сейчас пишу) библиотеку для работы с APIДля библиотеки создал папку с названием amoNG и туда при разработке поместил все файлы

236
Как отключить уведомления о действиях пользователей на сайте wordpress?

Как отключить уведомления о действиях пользователей на сайте wordpress?

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

79
Как можно можно вывести определенный столбец в зависимости от локализации проекта на Laravel

Как можно можно вывести определенный столбец в зависимости от локализации проекта на Laravel

Это мой первый и тестовый проект на laravelПодскажите пожалуйста как можно можно вывести определенный атрибут в зависимости от локализации...

95