использование шаблонов команд и фабричного проектирования для выполнения заданий в очереди
У меня есть список заданий, поставленных в очередь в базе данных, которые мне нужно прочитать из базы данных и выполнить их параллельно, используя многопоточность, и у меня есть список классов команд для выполнения каждого из этих заданий, реализующих общий интерфейс (шаблон команды). но когда я получаю отложенные задания из базы данных, мне нужно будет создать соответствующий объект команды для каждого задания примерно так (в заводском классе)
ICommand command;
switch (jobCode)
{
case "A":
command = new CommandA();
break;
case "B":
command = new CommandB();
break;
case "C":
command = new CommandC();
break;
}
command.Execute();
Есть ли лучший способ создать правильный объект команды без использования большого оператора switch, как описано выше? ИЛИ Есть ли какой-либо другой шаблон для выполнения заданий в очереди?
Решение: решается так (на основе выбранного ответа). Это сделает ленивую реализацию командных объектов.
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();