usando os padrões de comando e design de fábrica para executar tarefas na fila

Tenho uma lista de trabalhos na fila no banco de dados que preciso ler do banco de dados e executá-los em paralelo usando o encadeamento e tenho uma lista de classes de comando para executar cada um desses trabalhos, implementando uma interface comum (padrão de comando). mas quando recuperar os trabalhos pendentes do banco de dados, precisarei instanciar o objeto de comando correto para cada trabalho, algo como isto (em uma classe de fábrica)

ICommand command;
switch (jobCode)
{
  case "A":
     command = new CommandA();
     break;
  case "B":
     command = new CommandB();
     break;
  case "C":
     command = new CommandC();
     break;
}

command.Execute();

Existe uma maneira melhor de criar o objeto de comando correto sem usar uma instrução switch grande como acima? OU existe algum outro padrão para executar os trabalhos na fila?

Solução: resolvida assim (com base na resposta selecionada). Isso fará uma instancia lenta dos objetos de comand

public class CommandFactory
{
    private readonly IDictionary<string, Func<ICommand>> _commands;

    public CommandFactory()
    {
        _commands = new Dictionary<string, Func<ICommand>>
                        {
                            {"A", () => new CommandA()},
                            {"B", () => new CommandB()},
                            {"C", () => new CommandC()}
                        };
    }

    public ICommand GetCommand(string jobKey)
    {
        Func<ICommand> command;
        _commands.TryGetValue(jobKey.ToUpper(), out command);
        return command();
    }
}    

Client: 

        var factory = new CommandFactory();
        var command = factory.GetCommand(jobKey);
        command.Execute();

questionAnswers(3)

yourAnswerToTheQuestion