用于生成多个模拟的设计模式是什么?

Had*_*adi 11 simulation design-patterns builder composite decorator

我有一个在特定高度和特定温度下运行的模拟:

interface IGeneratable
{
    string Name { get; }
    void Generate();
}    

interface ISimulation : IGeneratable
{
    int Height { get; }
    int Temperature { get; }        
}
Run Code Online (Sandbox Code Playgroud)

Generate()用于模拟典型的过程包括多个步骤:

void Generate()
{
    Step1();
    Step2();
    Step3();
}
Run Code Online (Sandbox Code Playgroud)

现在,用户可以指定多个高度和/或多个温度.

在这种情况下,产生多个模拟(子模拟),每个高度/温度组合一个.

interface IMultiSimulation : IGeneratable
{
    ISimulation[] SubSimulations { get; }       
}
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,子模拟的Generate()方法与Step1,Step2,Step3顺序不同:

  • 如果指定了多个温度,则Step2()仅需要对所​​有子模拟执行一次,而不是每个温度执行一次(即每次多次模拟一次).
  • 如果指定了多个高度,则:
    • Step1() 首先为所有子模拟预先计算.
    • 然后执行步骤2,步骤3,......等.
  • 可以进行具有多个高度和多个温度的宏观模拟.这意味着需要满足上述2个标准.

一般注意事项

  • 步骤的实现被封装在IStep其中,实现IGeneratable.因此,模拟可以返回例如步骤列表.
  • 步数可以相当大.

我一直在尝试使用装饰模式,但没有成功.

我正在寻找一个适当的模式,其可扩展的解决方案可以处理单个模拟的生成以及多个模拟.

谢谢.

che*_*nop 0

在我看来,有一个非常具体的用例需要实现,所以我建议使用一个包含Generate()实现的类(我希望我正确理解了要求)

class Simulation
{
    string Name { get; }
    int[] Heights { get; }
    int[] Temperatures { get; }

    void Generate() {
         for (int i = 0; i < Temperatures.Count; i++) {
             for (int j = 0; j < Heights.Count; j++) {
                  GenerateStep1();
             }
             GenerateStep2();
             GenerateStep3();
         }
    }
}
Run Code Online (Sandbox Code Playgroud)