Метод стратегии хорошо работает с методом шаблона.
Метод шаблона определяет требования класса.Метод стратегии позволяет использовать объекты для определения поведения и определять их во время выполнения с помощью внедрения зависимостей.
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);
}
}
В то время как пример кода показывает только функции шаблона, вызывающие каждую стратегию, болееможет быть сделано в специализированной перегруженной версии шаблона функций, таких как проверка ввода, инициализация и тому подобное.И в конце концов, что-то должно вызывать стратегии.
Плюсы в том, что в приведенном выше примере вы можете использовать разный набор стратегий для разных условий (CRUD здесь может быть не лучшим примером).Поэтому, если вы хотите изменить способ вывода данных, но сохранить способ их сохранения / создания / загрузки, вам просто нужно изменить стратегию вывода.
Минус в том, что вы должны убедиться, что стратегии соответствуют нужному контексту, поскольку нет проверки типов, чтобы убедиться, что стратегии, которые вы передаете, действительны (любая из них будет работать до тех пор, пока она соответствует ожидаемой.базовый класс).О да, шаблон CRUDTemplate тоже может быть производным от базового класса.
Для данных в PHP я считаю, что массив лучше всего работает для передачи сложных параметров.Конечно, вы должны сделать проверку массива