请帮我实现该任务的工厂设计模式。
我正在开发预定的消息发送 Web 应用程序。用户可以指定自己的预定发送计划,消息将在需要时发送。用户只能选择 3 种重复类型中的一种:每月、每周、每天。对于这 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
我想使用工厂模式进行对象构造(它是最佳匹配吗?),并且不知道如何传递所有这些参数(不仅仅是$type,而是所有其他参数)来构造对象。
我应该创建将它们包装在单个数据对象中,并在 SchedulerFactory 类中创建方法“setOptions”并通过 getter 将此数据对象传递给“创建”构造方法吗?
也许在工厂类中创建这样的 setter 方法违反了工厂设计模式原则?我以前没有看到这样的例子,所以我现在有点困惑。
如果我走错了方向,请告诉我。您会为此任务推荐什么解决方案?
提前致谢