Предположим, у вас есть очередь, которая содержит объекты типа task
.
Теперь вы можете создавать подклассы task
по разным причинам. Если вы загружаете свои задачи из какого-либо источника, например из базы данных, вы можете использовать фабрику, чтобы определить, какой тип задачи загружать.
Например:
private IEnumerable<Task> GetTasks(DataTable Table){
Task NewTask;
foreach(DataRow Row in Table){
switch(tasktype){
case tasktypes.TaskTypeA:
NewTask = NewTaskA(...);
break;
case TaskTypes.TaskTypeB:
NewTask = NewTaskB(...);
break;
...
}
yield return NewTask;
}
}
Позже вы можете вызывать виртуальные методы для задач в вашей очереди, например, «потреблять» или «обрабатывать».
Преимущество фабричного подхода (в данном случае) заключается в том, что вам нужно включить тип задачи только один раз (при создании задачи) и позволить полиморфизму обрабатывать большинство всего остального.