【发布时间】:2016-08-23 18:01:13
【问题描述】:
我有一个在特定高度和特定温度下运行的模拟:
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,..etc 然后被执行。
-
- 可以进行具有多个高度和多个温度的宏大模拟。这意味着需要满足以上两个条件。
一般说明
- 一个步骤的实现被封装在
IStep中,它实现了IGeneratable。例如,模拟可以返回一个步骤列表。 - 步骤数可能相当大。
我一直在尝试使用装饰器模式,但没有成功。
我正在寻找一种具有可扩展解决方案的合适模式,该解决方案可以处理单个模拟和多个模拟的生成。
谢谢。
【问题讨论】:
-
一个抽象一个或多个模拟的模拟接口,听起来像Composite。
标签: design-patterns decorator simulation builder composite