以下では、EventHandlerがEventAを一方向に、EventBを別の方法で、他のイベント(EventC、EventD)を別の方法で処理します。 EventReceiverはイベントへの参照のみを受け取り、EventHandler.handle()を呼び出します。もちろん、常に呼び出されるバージョンは、EventHandler.handle(イベントイベント)です。Javaで多態的にディスパッチする
instanceOfを使用しないと、ポリモーフィックに(おそらくEventHandlerまたはジェネリックの別のメソッドを介して)適切なハンドルメソッドにディスパッチする方法がありますか?
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のビジターパターン –
Visitorパターンと非周期的なVistorパターンについて考えました。残念ながら、Eventクラスを変更することはできません。さらに、私は時間の経過とともに多くの特殊なイベントを追加する必要があります。 – user581638