私は、クライアントクラスが受信するメッセージのタイプに基づいて異なる動作を実行する次のような状況があります。私はinstanceofとif文が好きではないので、これを行うより良い方法があるのだろうかと思います。メッセージタイプのチェック時にinstanceofを避ける
私が考えていたことの1つは、クライアントクラスからメソッドを引き出してメッセージに入れることでした。私はIMessageインターフェースにprocess()のようなメソッドを置き、具体的なメッセージタイプのそれぞれにメッセージ固有の振る舞いを入れます。これは、タイプをチェックするのではなく、単にmessage.process()を呼び出すだけなので、クライアントを単純にします。ただし、これに伴う唯一の問題は、条件に含まれる動作がClientクラスに含まれるデータに対する操作と関係していることです。したがって、具体的なメッセージクラスでプロセスメソッドを実装した場合、クライアントに渡す必要があり、これが本当に意味をなさないかどうかはわかりません。
public class Client {
messageReceived(IMessage message) {
if(message instanceof concreteMessageA) {
concreteMessageA msg = (concreteMessageA)message;
//do concreteMessageA operations
}
}
if (message instanceof concreteMessageB) {
concreteMessageb msg = (concreteMessageB)message;
//do concreteMessageB operations
}
}
JMSを使用しているという事実に基づいて、IMessageとは何ですか? JMSにはあらかじめ定義されたメッセージタイプがあります。したがって、JMSを抽象化しようとしているのでなければ、それを変換する仲介者がいない限り、独自のメッセージタイプを定義する必要はありません。 – Robin