我正在尝试编写ODE求解器(类似于MATLAB中的ODE45)。我希望这个求解器“独立”,即我可以传递它想要解决的ODE的名称,并运行该特定微分方程的代码。
到目前为止,我有我的主类(程序的大部分内容)和一个名为ODEsolver的类(ODE求解器所在的类)。我希望能够从我的主类调用ODEsolver,并让ODE查看一个由String争论引用的方法(我要解决的ODE的名称)
我设想的方式是:
public class Main {
double y[];
double x0,xf,y0;
x0 = 0;
xf = 10;
y0 = 1;
ODEsolver ode1 = new ODEsolver("name_of_ode_to_be_solved");
y = ode1.ODE45(x0,xf,y0);
}
其中ODE45是ODEsolver类中的ODE求解器。
但是我不知道如何使用“name_of_ode_to_be_solved”来创建对该方法的调用(该方法不在ODEsolver中,它可以在main或其他类中)
谢谢!
答案 0 :(得分:2)
您可能要做的是创建一个名为ODE_TYPE
的枚举,然后将其传递给Factory
,这将创建该类型的解算器。像这样:
ODESolver solver = SolverFactory.Create(ODE_TYPE.FIRST_ORDER_LINEAR);
在这种情况下,ODESolver将被称为Interface
。然后,您将创建实现此接口的sevaral具体类。一个用于枚举中的每个元素。
我在C ++ DE解算器fdtl中使用了类似的东西。
也可能是您无法将结构概括到足以使用工厂模式。在这种情况下,您仍然可以使用您只需直接创建具体实现的接口。像这样,
ODESolver solver = new ODE45(x0, xf, y0);
然后你会打电话给
solver.solve();