Я думаю, вы можете использовать ответ от @TriPhoenix для большей части этого.
Единственное, что я хотел бы добавить, это то, что вы могли бы отправить данные вместе с вызовом на завод.
[MyCellFactory cellForTableView:tableView withType:kMyTypePlain data:data];
Вы, конечно, должны убедиться, что data
реагирует на общий интерфейс, чтобы гарантировать, что вы можете легко все настроить, например. убедившись, что каждый объект реагирует на похожий метод, такой как
cell.textLabel.text = data.textLabelText;
Вы можете сделать это, используя протокол, если хотите. Вам решать, как вы структурируете свои данные.