3

したがって、私の現在のプロジェクトでは、基本的に3つの主要なJavaクラスがあります。

  1. GUI
  2. インスタントメッセージング
  3. 計算

基本的に、完全な通信が必要であるため、GUIでプロジェクト全体を実行できるようにするのではなく、メディエーターアプローチを使用することにしました。

基本的に、メディエーターは通信をカプセル化します。私たちが遭遇した問題は、メディエーターが何かが完了したときに呼び出すための大量のメソッドを構築せずに、GUIコンポーネントを更新できるようにする方法です。

元。GUIがユーザーにログインしたいとします。メディエーターを経由してスレッドを作成し、ログインしますが、メディエーターは成功/失敗をGUIに中継し、ステータスメッセージを更新する必要があります。

もう1つの問題は、GUIを更新する必要があるが、モデレーターは必要ないということです。GUIがそのクラスのインスタンスを作成して実行できるようにするのは実用的ですか、それともすべてがメディエーターを通過する必要がありますか?

私たちの元の設計では、GUIですべてを管理していましたが、再利用性が大幅に低下しました。この場合に使用するより良い設計方法はありますか?

4

3 に答える 3

3

オブザーバーがあまりにも多くのオーバーヘッドをもたらすことに気付いた場合は、メディエーターが最善の方法かもしれません。GUIにショーを実行させるべきではないと私は間違いなく思います。メディエーターパターンを使用する場合は、メディエーター自体が担当する必要があります。あなたが考えるかもしれない何かは、コマンドパターンの変形です。Rubyを使用している場合は、メディエーターがあらゆる小さなことについてGUIに接続することを回避する手段として、関数コールバックを渡すことをお勧めします。ただし、Javaであるため、コマンドパターンスタイルでアクションをカプセル化する何らかの形式が役立つ場合があります。

于 2009-06-08T15:58:19.280 に答える
0

メディエーターによってコールバック/通知がトリガーされないようにする場合は、コールバックをログイン関数に挿入し、終了時にログインで呼び出すことができます。

ただし、Javaでコールバックを注入する方法はわかりません。関数が第一級市民である言語では、関数を渡すだけでかまいませんが、Javaを使用しているため、kmorrisが提案したコマンドパターンを使用する必要があると思います。

于 2009-06-08T16:04:08.627 に答える
0

また、GUIに、戻り値の取得または必要な値の設定(コマンドパターンのバージョン)を処理するコールバックオブジェクトをメディエーターに提供させることもできます。その場合、GUIからメディエーターへの呼び出しごとに1つあります。

もう1つの考えは、メディエーターが呼び出すメソッドを意味的に関連するチャンクにグループ化することです。特に、メディエーターに複数のGUIメソッドを連続して呼び出す傾向があるセクションがある場合:

   gui.a()
   gui.b()
   gui.c()

3つすべてを呼び出した結果を処理する単一のメソッドを作成できます。セマンティックにグループ化されたメソッド(つまり、など)の利点は、setFileInformationGUIを変更する必要がある場合、メソッドの内容は変更される可能性がありますが、メディエーターが行う呼び出しは変更されない可能性があることです。setFileMenusetTab

于 2009-06-08T16:25:59.573 に答える