我有一个BinarySearchTree
类,该类由AVLTree
和RedBlackTree
扩展。这两个派生类支持旋转,因此需要使用rotateLeft
和rotateRight
方法。一种方法是在BinarySearchTree
中实现这两种方法,以便它们可用于AVLTree
和RedBlackTree
,但是这些方法不属于BinarySearchTree
,因为它不支持旋转。我应该如何用Java处理这种情况?
最佳答案
创建一个中间类abstract class RotatableBinarySearchTree extends BinarySearchTree
,让它定义受保护的方法rotateLeft
和rotateRight
,然后使AVLTree
和RedBlackTree
从RotatableBinarySearchTree而不是BinarySearchTree扩展。
这满足了您在类之间共享具体实现的目标,而不必将代码添加到BinarySearchTree中,后者本身是不可旋转的。如果使用Rotatable
接口,则必须在两个子类中都复制逻辑,或者使用某种注入,在我看来对于这种情况而言,这不必要地复杂。
如果您不熟悉抽象类,请参阅Steve在注释中共享的链接。