Пожалуйста, помогите мне реализовать шаблон фабричного дизайна для этой задачи.
Я работаю над запланированной отправкой сообщений веб-приложением.
Пользователь может указать свой собственный план отправки по расписанию, и сообщения будут доставлены, когда это необходимо.
Пользователь может выбрать только один из 3 типов рекуперации: ежемесячно, еженедельно, ежедневно.
Для этого алгоритм трех типов восстановления похож:
1) выберите дату и время отправки (для первой доставки)
2) выберите вариант «повторять каждые X месяцев / недель / дней» в зависимости от типа восстановления
3) указать конец по типу (дата или ограничение по количеству вхождений)
Недельный планировщик немного отличается.
Он имеет еще одну особенность - дни недели для повторения (например: повторять каждый понедельник, пятницу)
class SchedulerFactory {
public function create($type) {
switch ($type) {
case "monthly" :
$Scheduler = new MonthlyScheduler();
break;
case "weekly" :
$Scheduler = new WeeklyScheduler();
break;
case "daily":
$Scheduler = new DailyScheduler();
break;
default:
return null;
}
}
}
Методы установки:
$SendScheduler->setSendDateAndTime("{$day}.{$month}.{$year}", time());
switch($end_by_type) {
case 'by_date':
$SendScheduler- >setEndByDate("{$end_by_date_day}.{$end_by_date_month}.{$end_by_date_year}");
break;
case 'by_occurences_limit':
$SendScheduler->setOccurencesLimit($occurences_quantity);
break;
}
$SendScheduler->addTaskOccuringEvery($RepeatEveryMonth);// repeat every X months/weeks/days depending on type
// only for weekly type
$SendScheduler->setWeekDayForRepeating($week_day); // repeat every Mon, Fri
Я хочу использовать шаблон Factory для построения объектов (это наилучшее совпадение?) И не знаю, как я могу передать все эти параметры (не только $ type, но все остальные) для построения объектов.
Должен ли я создать обтекание их в одном объекте данных, создать метод "setOptions" в классе SchedulerFactory и передать этот объект данных для "создания" метода конструирования через геттер?
Может быть, создание такого метода установки в классе Factory является нарушением принципов шаблона проектирования Factory? Я не видел подобных примеров раньше, поэтому сейчас я немного запутался.
Если я иду в совершенно неверном направлении, пожалуйста, дайте мне знать.
Какое решение вы бы порекомендовали для этой задачи?
Спасибо, заранее