Метод стратегии хорошо работает с шаблонным методом.
Метод шаблона определяет требования к классу. Метод стратегии позволяет использовать объекты для определения поведения и определять их во время выполнения с использованием инъекции зависимостей.
class CRUDTemplate
{
protected $updater;
protected $creator;
protected $deletor;
protected $loader;
public function __construct(IUpdate $updater, ICreator $creator, IDeletor $delete, ILoader $loader)
{
$this->updater = $updater;
//...snipped...
}
// sample template function; others are create, delete, update
public function load($id)
{
$this->content = $this->loader->load($id);
}
}
Хотя пример кода просто показывает шаблон функции вызова каждого из стратегии, можно сделать больше в специализированной перегруженной версии шаблонных функций, таких как проверка входных, initisation и тому подобное. И в конце концов, что-то нужно назвать стратегиями.
Плюсы в том, что для примера выше вы можете использовать различные различные стратегии для разных условий (CRUD не может быть лучшим примером здесь). Поэтому, если вы хотите изменить способ вывода данных, но сохраните, как они сохраняются/создаются/загружаются, вам просто нужно изменить стратегию вывода.
Недостатки в том, что вы должны убедиться, что стратегии предназначены для правильного контекста, так как нет проверки типов, чтобы гарантировать, что стратегии, которые вы проходите, действительны (любой будет работать до тех пор, пока он имеет базовый класс expectd). О да, CRUDTemplate можно было бы получить и из базового класса.
Для данных в PHP я обнаружил, что массив работает лучше всего для передачи сложных параметров. Конечно, вы должны сделать свою проверку массива