W dalszej części chcę, aby EventHandler obsługiwał EventA w jedną stronę, EventB w inny sposób i wszelkie inne zdarzenia (EventC, EventD) w jeszcze inny sposób. EventReceiver odbiera tylko odwołanie do zdarzenia i wywołuje funkcję EventHandler.handle(). Wersja, która zawsze jest wywoływana, oczywiście jest EventHandler.handle (zdarzenie Event).Polimorficzne wysyłanie w Javie
Bez użycia obiektu instanceOf, czy istnieje sposób na polimorficzną wysyłkę (być może za pośrednictwem innej metody w EventHandler lub generics) do odpowiedniej metody obsługi?
class EventA extends Event {
}
class EventB extends Event {
}
class EventC extends Event {
}
class EventD extends Event {
}
class EventHandler {
void handle(EventA event) {
System.out.println("Handling EventA");
}
void handle(EventB event) {
System.out.println("Handling EventB");
}
void handle(Event event) {
System.out.println("Handling Event");
}
}
class EventReceiver {
private EventHandler handler;
void receive(Event event) {
handler.handle(event);
}
}
+1 za wzór gościa –
Pomyślałem o wzorze Odwiedzającego i acyklicznego wzoru Vistora. Niestety nie mogę zmodyfikować klasy Event. Ponadto będę musiał z czasem dodać wiele specjalistycznych wydarzeń. – user581638