Как по мне, лучше все же решение с фабриками. Если классы RequestXX не тривиальные, то можно запросто получить серьезное дублирование кода в финальном исполняемом файле.
Конечно, эффект зависит от задачи и количества специализаций, но в любом случае это не есть хорошо.
А внутри фабрик можно уже плодить любые конструкции, которые хочется — их реализация-то скрыта.