Io-8-wyk-Slajd16
Rozwiązanie: drzewo
Naturalne rozwiązanie polega na stworzeniu wspólnego interfejsu, np. o nazwie Przeszukiwalny, który jest implementowany we wszystkich obiektach, które są częścią struktury i w których można szukać książek. Interfejs ten posiada dwie implementacje: Kategorię (która jest związana relacją agregacji z dowolną liczbą obiektów zależnych typu Przeszukiwalny, a zatem zarówno innych Kategorii, jak i Książek) oraz Książkę (reprezentującą element struktury, który nie posiada obiektów zależnych).
Obiekt klasy Katalog rzeczowy, który wywoła metodę szukaj () w kategorii znajdującej się w korzeniu drzewa katalogu, nie musi znać struktury tego drzewa, jego głębokości ani innych własności. Każda Kategoria, po wywołaniu jej metody szukaj (), realizuje ten sam algorytm: wykonuje wyszukiwanie na własnym obiekcie, a następnie wywołuje tę samą metodę na każdym jej obiekcie zależnym, co powoduje rekurencyjne przeszukanie drzewa w głąb.
Takie rozwiązanie umożliwia, zgodnie z podanymi wcześniej wymaganiami, jednolity sposób wyszukiwania, minimalizujący wiedzę, jaką o strukturze danych powinien posiadać klient. Możliwe jest także przeniesienie Książki z jednej Kategorii do innej w trakcie działania systemu (co nie byłoby możliwe w niektórych rozwiązaniach, np. związanych z dziedziczeniem).