gpt4 book ai didi

design-patterns - 使用什么设计模式来生成多个模拟?

转载 作者:行者123 更新时间:2023-12-04 02:24:27 24 4
gpt4 key购买 nike

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

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; }
}

但是,在这种情况下,子仿真的 Generate() 方法偏离了 Step1、Step2、Step3 的顺序:
  • 如果指定了多个温度,则 Step2()只需要对所有子模拟执行一次,而不是每个温度(即每个多重模拟一次)。
  • 如果指定了多个高度,则:
  • Step1()首先为所有子模拟预先计算。
  • 然后执行Step2、Step3等。
  • 可以进行具有多个高度和多个温度的大型模拟。这意味着需要满足以上 2 个标准。

  • 一般注意事项
  • 一个step的实现封装在IStep中,它实现了 IGeneratable .因此,例如,模拟可以返回步骤列表。
  • 步骤的数量可能相当大。

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

    我正在寻找具有可扩展解决方案的适当模式,该解决方案可以处理单个模拟和多个模拟的生成。

    谢谢。

    最佳答案

    在你的情况下,我会使用设计模式复合。
    generate 方法会检查它是否有任何组件。如果不是,它会简单地调用

    void Generate()
    {
    Step1();
    Step2();
    Step3();
    }

    但如果它确实有组件,则意味着它有多个模拟。然后代码将是这样的:
    void Generate()
    {
    if(this.simulations.Count==0)
    {
    Step1();
    Step2();
    Step3();
    }
    else
    {
    if(multipleHeights)
    {
    precomputeStep1();
    if(multipleHeights)
    {
    createSingletonForStep2(this);
    }
    else
    {
    Step2();
    }
    Step3();
    }
    }
    }

    对于第 2 步,我将简单地调用一个接收此组合作为参数的单例,因此对于这组模拟,将只有一个 step2。

    关于design-patterns - 使用什么设计模式来生成多个模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36923699/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com