Короткий ответ, фабрики переключаются, вот что они делают - вся суть этого стиля фабрики заключается в том, чтобы централизовать логику построения в одном месте, а не засыпать ее вокруг кодовой базы.
Пока вы не используете Static Factory и не пишете код для интерфейса IRoomControllerFactory, тогда вы получаете все обычные преимущества ООП - его замена во время выполнения / для тестирования - после всего, что вы говорите: «Yo RoomControllerFactory, дайте мне место для этого магического идентификатора! '
В качестве дополнительного ответа на ваш вопрос, вы можете спросить себя, зачем вам так много конкретных примеров RoomController? Возможно, отдав предпочтение композиции перед наследованием, вы могли бы реорганизовать вещи, чтобы использовать вместо них Builder?