我正在使用这个java应用程序来获得更多设计模式和OODesign的经验。该应用程序允许用户从列表中选择“方程式”。然后将向用户提示所选方程的参数,并将按下按钮以解决方程式。
我将方程实现为策略模式。我试图弄清楚如何将方程的名称放入列表框中。我想知道实现EquationInterface的Equation类是否有一种方法可以得到一个名为equationName的变量。这将允许程序员在为特定方程编写类时编写特定方程的名称。代码如下所列。
示例:当程序员设计要添加到程序中的新等式时,他们需要包含所创建策略的名称。
如果您有任何疑问,请告诉我们。我很难解释我想要完成的事情。如果您对更好的设计模式或实现此目标的方式有任何建议,请告诉我。
public class Equation {
public enum equationList {
DISTANCETRAVELLEDFALLINGOVERTIME,
TIMEFOROBJECTFALLDISTANCE
}
private EquationInterface solveInterface;
public Equation(EquationInterface solveInterface) {
this.solveInterface = solveInterface;
}
public void solve() {
solveInterface.performSolve();
}
public JPanel getParameterPanel() {
return solveInterface.createParameterPanel();
}
}
public interface EquationInterface {
public JPanel createParameterPanel();
public void performSolve();
}
public class DistanceTravelledFallingOverTime implements EquationInterface {
@Override
public void performSolve() {
// TODO Auto-generated method stub
System.out.println("DistanceTravelledFallingOverTime");
}
@Override
public JPanel createParameterPanel() {
// TODO Auto-generated method stub
return null;
}
}
答案 0 :(得分:1)
public interface EquationInterface {
public JPanel createParameterPanel();
public void performSolve();
public void setEquationName(String equationName);
public String getEquationName();
}
我会使用getter类型方法而不是变量。
一个示例实现
public class SampleEquation implements EquationInterface {
public JPanel createParameterPanel(){return null;}
public void performSolve(){
//solving an equation
}
private String equationName = "MyDefaultEquationName";// or = null
public void setEquationName(String equationName){
this.equationName = equationName;
}
public String getEquationName(){
return this.equationName;
}
}
答案 1 :(得分:1)
我会在getEquationName()
界面中添加EquationInterface
:
public interface EquationInterface {
public JPanel createParameterPanel();
public void performSolve();
public String getEquationName();
}
示例实现如下:
public class DistanceTravelledFallingOverTime implements EquationInterface {
@Override
public void performSolve() {
// TODO Auto-generated method stub
System.out.println("DistanceTravelledFallingOverTime");
}
@Override
public JPanel createParameterPanel() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getEquationName(){
return "Distance Travelled Falling Over Time";
}
}
此外,我建议你的设计有另一个改进。看一下EquationInterface
界面;它看起来有点厚。它包含getEquationName()
和performSolve()
方法,这些方法很有意义。他们都关注方程的实际功能。但是,使用与createParameterPanel()
等UI相关的方法对我来说非常奇怪。该接口现在依赖于JPanel
类,并且它以某种方式与UI相关联。我真的会把界面分成两部分; EquationInterface
将包含命名和解决方案,而另一个接口将用于创建UI元素。
这也解决了你对策略模式的担忧;现在EquationInterface
只会与方程的实际逻辑相关联,包括名称。换句话说,将命名逻辑添加到界面中应该感觉更自然。有关此接口隔离主题的更多详细信息,请参见here.