質問

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

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

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

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

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

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

私たちの元の設計では、すべてを GUI で管理するだけでしたが、それは再利用性を完全に殺していました。この場合に使用するより良い設計方法はありますか?

役に立ちましたか?

解決

あなたはあまりにも多くのオーバーヘッドをもたらすためにオブザーバーを見つけている場合は、

、メディエータは行くための最善の方法かもしれません。私は間違いなくあなたはGUIがショーを実行してはならないと思います。あなたはMediatorパターンを使用するつもりなら、仲介者自身が担当する必要があります。あなたは検討するかもしれない何かがCommandパターンの変形です。あなたはルビーを使用していた場合、私は仲介者があらゆる小さい事のためのGUIを連絡した回避の手段として、周りの関数コールバックを渡すことをお勧めかもしれません。それはJavaのだから。しかし、Commandパターンのスタイルでアクションをカプセル化のいくつかの形式が役立つことがあります。

他のヒント

あなたは、コールバック/通知が仲介者によってtriggerdしたくない場合は、

は、ログイン関数にコールバックを注入し、それが終了すると、ログインにそれを呼び出すことができます。

私は、しかし、あなたはJavaでコールバックを注入しに行くか方法がわかりません。関数がファーストクラスの市民で言語で、あなただけの関数を渡すことができますが、あなたはJavaで私はあなたがkmorrisが示唆されているようにコマンドパターンを使用する必要があります推測している。

また、GUIは、仲介者に戻り値を取得するか、あなたは(Commandパターンのバージョン)必要なものは何でも値設定処理するコールバックオブジェクトを与えた試してみてください。その後、仲介者へのGUIからの呼び出しごとに1があるでしょう。

別の考えは、グループにメディエーターが意味的に関連するチャンクを呼び出す方法です。特に、メディエータは、行のいくつかのGUIメソッドをコールする傾向があるセクションを有する場合:

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

あなたはすべての3つの呼び出しの結果を処理する単一のメソッドを作成することができます。意味的にグループ化された方法の利点(すなわちsetFileInformationなどsetFileMenusetTab、オーバー)もありますが、GUIを変更する必要がある場合は、その後、メソッドの内容は変更される場合がありますが、コールはメディエータがない可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top