Как сделать рефакторинг Переключиться в Словарь / Фабрика

Я пытаюсь запустить чтение «Рецепт» из текстового файла и анализировать построчно для динамического вызова ряда методов. Я думаю, что мне нужно реализовать Factory после того, как я немного погуглил, но мне не хватает некоторых ключевых деталей. Это ближайший пример, который у меня есть:

http://simpleprogrammer.com/2010/08/17/pulling-out-the-switch-its-time-for-a-whooping/

Следующий код является фрагментом того, что есть сейчас.

    internal static void Run(int Thread_ID, List<StringBuilder> InstructionSet, List<double>[] Waveforms)
    {
        //Init
        List<double>[] Register = new List<double>[10];
        for (int i = 0; i < Waveforms.Length; i++) { Register[i] = new List<double>(Waveforms[i]); }
        for (int i = 0; i < Register.Length; i++) { if (Register[i] == null) { Register[i] = new List<double>(); } }

        //Run Recipe Steps
        foreach (var item in InstructionSet)
        {
            Step Op = Step.Parse(item.ToString());
            switch (Op.TaskName)
            {
                case "SimpleMovingAverage":
                    Register[Convert.ToInt32(Op.Args[0])] = Signal_Filters.SimpleMovingAverage(Register[Convert.ToInt32(Op.Args[1])], Convert.ToInt32(Op.Args[2]));
                    break;

                case "RollingSteppedStdDeviation":
                    Register[Convert.ToInt32(Op.Args[0])] = Signal_Filters.RollingSteppedStdDeviation(Register[Convert.ToInt32(Op.Args[1])], Convert.ToInt32(Op.Args[2]), Convert.ToInt32(Op.Args[3]));
                    break;

               //... etc. many, many methods to be called.
            }
        }
    }

... и ниже часть примера, о котором у меня есть вопросы:

public static class MoveFactory
{
    private static Dictionary<string, Func<IMove>> moveMap = new Dictionary<string, Func<IMove>>()
    {
        {"Up", () => { return new UpMove(); }},
        {"Down", () => { return new DownMove(); }},
        {"Left", () => { return new LeftMove(); }}
        // ...
    };

    public static IMove CreateMoveFromName(string name)
    {
        return moveMap[name]();
    }
}

Могу ли я автоматически создать список словаря? Таким образом, всякий раз, когда я добавляю новый класс, который реализует мой Factory Interface (мой эквивалент IMove), мне не нужно обновлять свой словарь или почти любую другую часть моего кода. Возможно, это может быть вызвано как часть интерфейса?

В приведенном выше примере кода, я не вижу его передачи аргументов внутрь и наружу. Глядя на мой код, у меня есть данные, которые мне нужно мутировать постепенно ... Как бы я это сделал, используя Factory.

Фабрика должна быть поточно-ориентированной, так как я хочу передать разные исходные данные нескольким рабочим, каждый из которых запускает свой собственный рецепт.

Ответы на вопрос(1)

Ваш ответ на вопрос