Java 将实用程序方法移动到抽象超类中是合法的还是错误的做法?
我与它的实现有一个接口。公共接口方法使用许多私有方法进行计算:Java 将实用程序方法移动到抽象超类中是合法的还是错误的做法?,java,styles,code-cleanup,Java,Styles,Code Cleanup,我与它的实现有一个接口。公共接口方法使用许多私有方法进行计算: public class FooServiceImpl implements FooService { @Override public void method1() { calc1(); calc2(); ... ... } @Override public void method2() { calc1();
public class FooServiceImpl implements FooService {
@Override
public void method1() {
calc1();
calc2();
...
...
}
@Override
public void method2() {
calc1();
calc2();
...
...
}
private Double calc1() {
...
...
}
private Double calc2() {
...
...
}
...
...
}
为了更好地进行概述,我将公共接口方法和实用工具方法移动到一个抽象类中,从而将它们分开:
public class FooServiceImpl extends AbstractFooService implements FooService {
@Override
public void method1() {
calc1();
calc2();
...
...
}
@Override
public void method2() {
calc1();
calc2();
...
...
}
}
这是合法的模式还是不好的做法?当然。好吧,我不能为它命名一个模式,但确定你把所有在派生中是重复的东西都放进父代中了。-如果每个派生都需要不同的实现,那么情况就不同了,那么接口可能更合适。此外,如果您还想从其他内容继承,请参见。请对常用方法使用受保护的修饰符。2.若您对AbstractFooService使用抽象修饰符,那个么它也可以实现FooService。这将允许您仅在FooServiceImpl中扩展AbstractFooService。只有当AbstractFooService将包含多个子类的公共方法时,这才是合理的。否则您不需要使用“abstract”。当然。好吧,我不能为它命名一个模式,但确定你把所有在派生中是重复的东西都放进父代中了。-如果每个派生都需要不同的实现,那么情况就不同了,那么接口可能更合适。此外,如果您还想从其他内容继承,请参见。请对常用方法使用受保护的修饰符。2.若您对AbstractFooService使用抽象修饰符,那个么它也可以实现FooService。这将允许您仅在FooServiceImpl中扩展AbstractFooService。只有当AbstractFooService包含多个子类的公共方法时,这才是合理的。否则,您不需要使用“abstract”。
public abstract class AbstractFooService {
Double calc1() {
...
...
}
Double calc2() {
...
...
}
...
...
}