Насчёт N действий со switch. Я бы не сказал, что N действий, ведь это всё равно одно действие, если функция адекватно названа и работает на одном уровне абстракции. А с длинными функциями можно бороться как обычно - дроблением на более мелкие.
Ну тут можно несколько классов с одним и тем же методом сделать. Каждый класс соответствует какому-то варианту switch ну и вся история. Таки да, нужна тогда старая добрая фабрика и умная богатая entity у которое внутри и будет это класса лежать как ее поле.