Jon*_*han 3 java oop inheritance design-patterns interface
我正在学习 Java 和设计模式,并且正在尝试了解何时使用接口和抽象类。我想知道在策略设计模式中,为什么最好使用行为/算法子类的接口而不是抽象超类?
是否只是因为不需要抽象类,因为每个行为/算法子类都有自己的实现,因此抽象超类只会提供不会使用的额外功能?
抽象类是否意味着将来如果需要的话有额外的可能性使用这个额外的功能,例如向抽象超类添加一个方法,如果需要的话,该方法由行为/算法子类共享。有什么理由说这是一个坏主意吗?
还是还有其他原因?
您应该为所有策略使用通用接口,并创建一个实现它的抽象类。因此,尽管您的所有策略当前共享一个抽象类,但您的系统是可扩展的,因为您将来可以创建与该抽象类无关的策略。
现在您应该做出只使用超类的某些方法的决定。它可能值得,也可能不值得。
注意::如果您使用类似于模板方法模式的东西,您应该检查如何使用钩子。