java - 具有不同输入参数数量的算法的最佳设计模式
问题描述
我正在尝试帮助我的朋友完成他的项目,同时我看到他实现了 2 个几乎相似的算法。
我的第一个想法是使用模板模式。
public abstract class Template {
calculate();
save();
}
等等。但是在第二种算法中calculate()
,save()
需要额外的参数。两种算法中两种方法中的代码都重复了 90%。
可以说在第一个算法中我只需要经度和第二个经度和纬度。
因此,使用模板模式实现它的唯一方法是创建一些具有经度和纬度的对象,并将其传递给两种算法。但是,我不喜欢这个解决方案,因为第二个参数在第一个算法中将是“null”。
也许我没有看到更好、更清洁的方法来解决这个问题?
解决方案
您可以拥有您的模板,但您可以传递一个类型为 Calculator 的对象,并让计算器具有不同数量的参数,例如这样做:
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));
这样您就可以将计算与模板分开。您可以从那里改进 - 例如,您可以共享计算器,而不是每次都创建一个新实例。
推荐阅读
- javascript - Uncaught RangeError: Maximum call stack size exceeded 如果我想发送一个包含对象的数组
- tkinter - 在按钮命令之后,标签配置未按预期工作
- go - 如何覆盖 go 模块中的依赖项?
- mysql - Illuminate\Database\QueryException (23000) SQLSTATE[23000]:完整性约束违规:1048 列 'first_name' 不能为空
- javascript - React 图表,但它看起来很特别
- windows - 我怎么能杀死“abc.exe”的所有任务,除了具有特定PID的任务?
- java - java - 如何将函数作为参数从java传递给kotlin方法?
- python - 如何以特定顺序对第一个字母进行排序,以其他特定顺序对第二个字母进行排序
- r - R 等效于具有内部连接和条件的更新查询
- python - 如何从 csv 数据集中找到唯一的痕迹?