複数のタイプのイベントをオブザーバーに通知するオブザーバブルの update() 呼び出しを解釈するときに、関連する醜い条件付きキャストを回避しようとしています。また、フラグを notifyObservers()/update() メソッドに渡したくないです。
オブザーバーが監視可能なオブジェクトをポーリングして変更内容を確認する必要はありません。この新しいデータを update() メソッド (または同様のもの) を介してオブザーバーに提供したいと考えています。
私には解決策のアイデアがあります。通知の種類ごとに 1 つの監視可能なオブジェクトをインスタンス化します。例: オブザーバブルはハードウェア デバイスを表すオブジェクトであり、その状態を表すオブザーバブルが含まれます。
public final Observable connectionState = new Observable();
public final Observable dataState = new Observable ();
このように、オブザーバーは、1 つのオブザーバー、つまり通知タイプごとに 1 つのオーバーライドされた update() メソッドを使用できるため、クエリや条件付きキャストを行う必要はありません。
多くの欲求不満の後、これは私が考えることができる最もエレガントな解決策ですが、オブザーバー/オブザーバブルを適切に使用する方法についてのポイントを逃したという恐ろしい気持ちがあります。
そのソリューションに関する私の主な問題は次のとおりです。
- まだキャストが含まれています(少なくとも条件付きではありません)
- オブザーバブルはオブザーバブルである必要があるため、パブリック メンバーである必要があります。これにより、オブザーバーは addObservable() を呼び出すことができますが、notifyObservers() を呼び出すこともできます。
私は正しいことをしていますか?
ありがとう