У меня есть симуляция, которая работает на определенной высоте и определенной температуре:
interface IGeneratable
{
string Name { get; }
void Generate();
}
interface ISimulation : IGeneratable
{
int Height { get; }
int Temperature { get; }
}
Процесс Generate()
для моделирования обычно включает в себя несколько этапов:
void Generate()
{
Step1();
Step2();
Step3();
}
Теперь пользователь может указать несколько высот и/или несколько температур.
В этом случае генерируются множественные симуляции (субимоляции), по одному на каждую комбинацию высоты/температуры.
interface IMultiSimulation : IGeneratable
{
ISimulation[] SubSimulations { get; }
}
Однако в этом случае метод Sub-simulation Generate() отклоняется от порядка Step1, Step2, Step3:
- Если указано несколько температур, то
Step2()
необходимо выполнить только один раз для всех подмодулей, а не для температуры (т.е. один раз для мультимоделирования). - Если указано несколько высот, то:
-
Step1()
предварительно вычисляется сначала для всех под-симуляций. - Затем выполняются шаги Step2, Step3 и т.д.
-
- Возможно иметь большое симуляцию с несколькими высотами и несколькими температурами. Это означает, что необходимо выполнить 2 вышеуказанных критерия.
Общие примечания
- Этап реализации инкапсулирован в
IStep
, который реализуетIGeneratable
. Таким образом, для моделирования можно, например, вернуть список шагов. - Количество шагов может быть довольно большим.
Я пытаюсь использовать шаблон декоратора, но без успеха.
Я ищу подходящий шаблон с масштабируемым решением, которое будет обрабатывать генерацию одиночного моделирования, а также несколько симуляций.
Спасибо.