У меня есть моделирование, которое работает на определенной высоте и определенной температуры:Какой шаблон дизайна используется для создания нескольких симуляций?
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; }
}
Однако, в этом случае, суб-моделирования генерируют() отклоняется от порядка Шаг 1, Шаг 2, Шаг 3:
- Если указано несколько температур, то
Step2()
должна быть выполнена только один раз для всех под-симуляций, а не для температуры (т. е. один раз для мультимоделирования). - Если указано несколько высоты, то:
Step1()
предварительно сначала вычисляется для всех суб-моделирования.- Шаг 2, Шаг 3 и т. Д. Затем выполняются.
- Возможно иметь большое моделирование с несколькими высотами и несколькими температурами. Это означает, что необходимо выполнить 2 вышеуказанных критерия.
Общие замечания
- реализация для шага воплощен в
IStep
, который реализуетIGeneratable
. Таким образом, для моделирования можно, например, вернуть список шагов. - Количество шагов может быть довольно большим.
Я пытался использовать узор декоратора, но безуспешно.
Я ищу подходящий шаблон с масштабируемым решением, которое будет обрабатывать генерацию одиночной симуляции, а также несколько симуляций.
Спасибо.
Интерфейс моделирования, который абстрагирует одно или несколько симуляций, звучит как [Composite] (https://sourcemaking.com/design_patterns/composite). – jaco0646