с использованием команд и шаблонов проектирования фабрики для выполнения заданий в очереди

У меня есть список заданий, поставленных в очередь в базе данных, которые мне нужно прочитать из базы данных и выполнить их параллельно с использованием потоковой передачи, и у меня есть список классов команд для выполнения каждого из все эти задания реализуют общий интерфейс (шаблон команд). но когда я извлекаю ожидающие задания из базы данных, мне нужно будет создать экземпляр нужного командного объекта для каждого задания примерно так (в фабричном классе)

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

command.Execute();

Есть ли лучший способ создать правильный командный объект без использования большого оператор переключения, как указано выше? ИЛИ существует ли какой-либо другой шаблон для выполнения заданий в очереди?

Решение: решается таким образом (на основе выбранного ответа). Это сделает ленивое создание экземпляров командных объектов.

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();
6
задан RKP 9 January 2012 в 15:52
поделиться