Come posso implementare un polimorfico albero binario di ricerca (che fa uso di EmptyTree e NonEmptyTree) senza usare downcasting o classe di controllo?
java polimorfico albero binario di ricerca
Creare un'interfaccia comune come ad esempio:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
Quindi fornire classi che implementano l'interfaccia comune:
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) {
// ...
}
}
L'implementazione per l'EmptyTree sarà sempre indicare un errore nella ricerca per la voce (sia con il ritorno nullo o lanciando un'eccezione), mentre l'implementazione di NonEmptyTree sarà o si tornare (se la ricerca fornita partite chiave) o delegare a sinistra oa sottostrutture destra. A causa della sottostruttura a sinistra oa destra esisterà sempre (lo farà essere un NonEmptyTree o un EmptyTree), la classe "NonEmptyTree" può semplicemente fare riferimento ai suoi figli attraverso l'interfaccia comune e fare affidamento sul fatto che il tipo di runtime farà la cosa giusta (quindi non è necessario fare qualsiasi fusione o il controllo di tipo dei bambini nella realizzazione dell'algoritmo).
L'unico posto in cui è necessario conoscere il tipo di esecuzione è quando si costruisce i bambini.













