Mapeamento dinâmico do valor de enum (int) para digitar

Parece que esse problema é bastante comum em nosso trabalho.

Nós estamos enviando um valor int ou enum através da rede, então nós o recebemos, gostaríamos de criar / chamar um determinado objeto / função.

A solução mais simples seria usar a instrução switch, como abaixo:

switch (value) {
    case FANCY_TYPE_VALUE: return new FancyType();
}

Funciona bem, mas teríamos muitos desses blocos de switches, e quando criamos novo valor e tipo, precisaríamos mudar todos eles. Parece certo.

Outra possibilidade seria usar os modelos. Mas não podemos, já que o valor de enum é definido em tempo de execução.

Existe algum padrão de design correto para isso ou qualquer abordagem correta?

Parece um problema muito comum e comum em todos os dias codificação ...

questionAnswers(4)

yourAnswerToTheQuestion