我想创建一个将激活函数
应用于某个值的类。类如下
public class ActivationFunction {
public static double function(double value, Functions functions) {
if(functions.equals(Functions.SIGMOID)) {
return sigmoid(value);
}
return 0f;
}
public static double derivativeOfFunction(double value, Functions functions) {
if(functions.equals(Functions.SIGMOID))
return sigmoidDerivative(value);
return 0f;
}
private static double sigmoid(double value) {
return 1 / (1 + Math.exp(0 - value));
}
private static double sigmoidDerivative(double value) {
return ( Math.exp(0 - value) / ( (1 + Math.exp(0 - value)) * (1 + Math.exp(0 - value)) ) );
}
}
其中Functions
是定义不同函数的enum
。现在只有 sigmoid
函数,但会添加更多函数。
问题
我认为它违反了开闭原则
,这是 OOP 的 5 个SOLID
原则之一(可能它违反了更多)。那么,编写此类以适应将来添加更多功能的正确方法是什么?
感谢任何帮助。
最佳答案
您可以将公共(public)接口(interface)的实现放在枚举本身中。
类似这样的事情:
public enum Functions {
SIGMOID {
public double function(double value) { return 1 / (1 + Math.exp(0 - value)); }
public double derivative(double value) { return ...; }
},
OTHER_FUNCTIONS { ... }
public abstract double function(double value);
public abstract double derivative(double value);
}
然后,您的 ActivationFunction
就变得非常容易编写 - 它甚至可能不再有用。
关于java - 遵循所有 SOLID 原则的正确版本的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43737522/