Разбираюсь с паттерном стратегия и в основном натыкаюсь на пример вроде такого в котором мы делаем что то вроде такого:
1 Создаем обьект класса который отвечает за какойто алгоритм
2 Создаем обьект класса где используется алгоритм, передаем зависимость через конструктор и потом используем через свойство класса.
а кто то может привести реальный пример на php ? что если алгоритм зависит от данных в реквесте ? в контролере добавить кучу if с помошью которых будет выбираться алгоритм ?
Ну если по пропростому в целом идея такая (лень код писать)
1) Создаешь кучу объектов класса где будет алгоритм обработки реквеста
1.1)реализуешь в каждом этом объекте метод do($request) - сама обработка реквеста
1.2)реализуешь в каждом этом объекте метод can($request) - можно не весь реквест а какой нибудь флаг этот метод будет возвращать true если этот объект подходит для обработки этого реквеста
2) Создаешь объект класса обработки стратегий,
2.2)в приватном поле опиши массив доступных классов стратегий (можно даже указать неймспейсами а тогда метод can сделать статическим)
2.3)реализуешь метод do($request) где пробегаешься циклом по каждой стратегии вызывая метод can и у того которого вернула true вызываешь do($request)
Denis те у меня например 100 алгоритмов я должен создать 100 обьектов этих алгоритмов, в цикле все проверить и вызвать только один который подходит ? Этож как тормозить все будет ?
vrazbros,
"Цепочка ответвенности" наверно что то типа пайплайна или мидлвары, когда результат одного обработчика передается в следущий.
да если у вас 100 алгоритмов у вас 100 объектов и вызвать в цикле только один который подходит.
а тормозить будет так же как и без них у вас будет полотно кода из кучи if...elseif....elseif....elseif и так 100 раз но перебрать в цикле это более читабельно
vrazbros,
Как бы да, но нет ))))
1) 100 таких ифоф погубят всю читаемость
2) условие по которому должна выполняться та или стратегия знает только стратегия и больше никто, даже тот класс который все это оркестрирует в нем не должно быть бизнес логики