java - 不同输入参数数量的算法的最佳设计模式

标签 java design-patterns

我正在尝试帮助我的 friend 完成他的项目,同时我看到他实现了 2 个几乎相似的算法。

我的第一个想法是使用模板模式。

public abstract class Template {
    calculate();
    save();
}

等等。然而,在第二种算法中,calculate()save() 需要额外的参数。两种算法中两种方法内的代码有 90% 是重复的。

假设在第一个算法中我只需要经度,而在第二个算法中我需要经度和纬度。

因此,使用模板模式的唯一方法是创建一些具有经度和纬度的对象,并将其传递到两种算法中。但是,我不喜欢这个解决方案,因为第二个参数在第一个算法中将为“空”。

也许我没有找到更好、更干净的方法来解决这个问题?

最佳答案

您可以拥有模板,但可以传递计算器类型的对象并拥有具有不同数量参数的计算器,例如这样做:

public class Template {
    calculate(ICalculator calculator);       
}

interface ICalculator(){
  double calculate();
}

然后你就可以拥有不同类型的计算器:

class OneParameterCalculator implements ICalculator{

 private final double latitude;

 public OneParameterCalculator(double latitude){ this.latitude=latitude; }

 public double calculate(){
 ....
 }
}

class TwoParameterCalculator implements ICalculator{

 private final double latitude;
 private final double longtitude;

public TwoParameterCalculator (double latitude,double longtitude){ this.latitude=latitude; this.longtitude=longtitude; }

 public double calculate(){
 ....
 }
}

然后您可以使用模板实例,例如:

myTemplate.calculate(new OneParameterCalculator(latitudeValue));

这样您就可以将计算与模板分开。您可以从那里进行改进 - 例如,您可以共享计算器,而不是每次都创建一个新实例。

关于java - 不同输入参数数量的算法的最佳设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50529342/

相关文章:

java - 尝试返回 JSON 时,Jax-RS 错误 500 无异常

java - 抛出 StackUnderFlowException - 怎么办?成本高吗?

java - 在这种特殊情况下如何最大限度地减少对象创建?

algorithm - 动态成就系统算法/设计

Java:将对象链接到另一个对象中的变量

Asp.net MVP - 创建动态控件,在哪里?

java - 命令模式应用的真实世界示例

java - 根据变量值执行不同的类

java - ArrayList 意外越界结果

java - 如何通过查询sqlite匹配数字 "start with"