假设我有一个Filter
接口
public interface Filter {
public boolean satisfies(Earthquake earthquake)
}
它可以有不同的实现(如下所示)
public final class MagnitudeFilter implements Filter {
private final double minimumMagnitude;
private final double maximumMagnitude;
private final ComparisonStrategy strategy;
public MagnitudeFilter(double minimumMagnitude, double maximumMagnitude, ComparisonStrategy strategy) {
this.minimumMagnitude = minimumMagnitude;
this.maximumMagnitude = maximumMagnitude;
this.strategy = strategy;
}
@Override
public boolean satisfies(Earthquake earthquake) {
return switch (strategy) {
case EXCLUSIVE -> earthquake.magnitude() > minimumMagnitude &&
earthquake.magnitude() < maximumMagnitude;
case INCLUSIVE -> earthquake.magnitude() >= minimumMagnitude &&
earthquake.magnitude() <= maximumMagnitude;
};
}
}
在某些情况下,我希望执行inclusive
比较,而在其他情况下,我希望执行exclusive
比较,但是在上面的形式中,我需要 for each 实现重复switch
表达式.
是否有其他方法可以将此模式推广到所有实现,从而不必重复Switch语句中的代码?
试图使用另一个界面,但最终再次陷入了重复代码的循环.