クライアント クラスが受信するメッセージの種類に基づいて異なる動作を実行する次のような状況があります。instanceof ステートメントと if ステートメントが気に入らないので、これを行うためのより良い方法があるかどうか疑問に思っています。
私が考えたことの 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
}
}