想象一下以下界面:
public interface ActivationFunction {
double calculate(double value);
}
有两个类似的实现:
基于类:
public class SignFunction implements ActivationFunction {
@Override
public double calculate(double value) {
return value >= 0.0 ? 1.0 : -1.0;
}
}
...
final SignFunction signFunction = new SignFunction();
基于接口:
public interface SignFunction extends ActivationFunction {
@Override
default double calculate(double value) {
return value >= 0.0 ? 1.0 : -1.0;
}
}
...
final SignFunction signFunction = new SignFunction() {
};
其中哪一个更可取,为什么?
感谢您的意见
两者都工作得很好,所以在某种程度上,这只是个人喜好以及如何在您的应用程序中使用的问题。在类似的情况下,我会选择一种机制并使用它,直到很明显一种方法比另一种方法更合适。
如果您现在想尝试做出“正确”的决定,那么接口机制的主要优点(在我看来)是它允许类的行为由多个接口组成。您可以拥有一个从多个接口获取函数实现的类,而您无法通过普通的旧类继承来实现。
另一个优点是它强制函数是无状态的,这使得调试和理解它们更容易。也不太可能有人不必要地将状态引入到您的函数中。
正如本文的另一个答案所示,不利之处在于并非所有开发人员都意识到您可以在接口中实现,因此您可能会从其他开发人员那里得到一些反馈。
您还需要在某处实例化一个对象,以便能够调用接口上的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句