Powiedzmy, że mam interfejs ŹródłoFigur i różne jego implementacje, np. ŹródłoTrójkątów i ŹródłoKwadratów.
Implementacje te dostarczają obiekty typu Trójkąt i Kwadrat, implementujące interfejs Figura.
Każdą Figurę można narysować wywołując Figura.rysuj(), oczywiście implementacja rysowania trójkątów jest inna niż kwadratów czy innych figur.
Jednak nie jestem zadowolony z tego rozwiązania, ponieważ Trójkąt czy Kwadrat to b. proste obiekty, których w systemie może być tysiące i nie powinny odpowiadać za rysowanie.
Od razu nasunęło mi się takie rozwiązanie: Stworzyć interfejs Rysownik z metodą rysuj(Figura), oraz implementujące go klasy RysownikTrójkątów, RysownikKwadratów itd.
Problem w tym, że przy takim podejściu potrzebne jest rzutowanie.
ŹródłoFigur zrodlo = new ŹródłoTrójkątów();
Rysownik rysownik = zrodlo.pobierzRysownika(); //obiekt typu RysownikTrójkątów
List<Figura> figury = zrodlo.pobierzFigury();
Figura figura1=figury.get(0);
rysownik.rysuj(figura1);
Jak widać RysownikTrójkątów musiałby zrzutować sobie obiekt typu Figura na Trójkąt.
Czy mogę w jakiś sposób uniknąć tego rzutowania, jednocześnie zachowując prostotę klas reprezentujących figury?
Jeśli nie, to jak oceniacie moje rozwiązanie?
Z góry dzięki za pomoc!