Возможно исключить внешний переключатель, используя какой-то шаблон фабрики.И вложенный переключатель с использованием своего рода шаблона стратегии.
Примерная реализация ниже (надеюсь, вы используете Java 8+).
public void someServiceMethod(String selectedModel, Action selectedAction, String input) {
ActionController controller = ActionControllerFactory.forModel(selectedModel);
selectedAction.accept(controller, input);
}
public interface ActionController {
void create();
void read(String id);
void update(String id);
void destroy(String id);
}
public enum Action implements BiConsumer<ActionController, String> {
CREATE {
@Override
public void accept(ActionController controller, String input) {
controller.create();
}
},
READ {
@Override
public void accept(ActionController controller, String input) {
controller.read(input);
}
},
UPDATE {
@Override
public void accept(ActionController controller, String input) {
controller.update(input);
}
},
DESTROY {
@Override
public void accept(ActionController controller, String input) {
controller.destroy(input);
}
}
}