W jaki sposób można wdrożyć polimorficzny binarne drzewo poszukiwań (sprawia, że korzystanie z EmptyTree i NonEmptyTree) bez użycia rzutowanie w dół lub klasy sprawdzanie?
java polimorficzny binarne drzewo poszukiwań
Tworzenie wspólnego interfejsu, takich jak:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
Następnie dostarczyć klas, które implementują wspólny interfejs:
class EmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K key) {
// ...
}
}
class NonEmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K searchKey) {
// ...
}
}
Implementacja dla EmptyTree zawsze będzie oznaczać awarię w poszukiwaniu elementu (czy to przez zwrócenie null lub rzucając wyjątek), podczas gdy Twój realizacja NonEmptyTree albo powróci się (jeśli przewidziane wyszukiwania kluczowe mecze) lub przekazać w lewo lub prawego poddrzewa. Ponieważ w lewo lub w prawo subtree zawsze istnieje (to będzie albo do NonEmptyTree lub EmptyTree) klasa „NonEmptyTree” może po prostu odwołać się do swoich dzieci poprzez wspólny interfejs i powoływać się na fakt, że typ Runtime zrobi dobry uczynek (a więc nie ma potrzeby robić żadnych rozstrzygający lub typ kontroli nad dziećmi w realizacji algorytmu).
Jedyne miejsce, gdzie trzeba znać typ wykonania jest podczas konstruowania dzieci.













