4

Observable/Observer クラス/インターフェースを使用する Java で作成された基本的な MVC パターンがあります。

Observable    Observer      Observable/Observer
Model         Controller    View

View triggers an event to the Controller, when the user interacts with the GUI.
- E.g presses a button, fills in a field, etc.

Model triggers an event to the View when it updates its state.
- E.g when the a button was pressed and the Controller requests new results.

私の質問は Observer 関数についてです

update(Observable obs, Object arg);

これは 1 つの機能ですが、私Viewの例ではさまざまな種類の更新を行う必要があります。検索結果の更新と追加情報の表示をどのように区別すればよいでしょうか? これらは、モデルとは異なるオブジェクトを使用する 2 つの完全に異なる更新です。

私の最初のアイデアは、オブジェクトを使用して、必要な更新を説明する文字列を渡すことでした。

"UpdateResults" "DisplayAdditionalInformation" "AddQuestions"

しかし、それはエラーが発生しやすく、醜いようです。私の 2 番目の本能は、オブジェクトとして渡される EventObject を作成することでしたが、使用している EventObject の種類を尋ね続ける必要があります。

if (arg instanceof ResultEventObject) 
    // Get results from model
else if (arg instanceof InformationEventObject)
    // Get information from model
else if (arg instanceof QuestionsEventObject)
    // get questions from model

3 つ目のアイデアは、単純にすべてを更新することですが、それは無意味に非効率的です。

おそらく、Observable/Observer インターフェースを正しく理解していないか、update() の作成者が意図したとおりに使用していません。updateしたがって、私の質問は、処理するさまざまな種類の更新またはイベントがある場合に、関数を適切に使用するにはどうすればよいですか?

4

2 に答える 2

1

はい、Listener Interface を使用する方がよいと思います

このメモを確認してくださいhttp://www.softcoded.com/web_design/java_listeners.php

于 2012-06-05T16:33:02.073 に答える
1

Listenerリッスンしているビュー/モデルに応じて、独自のインターフェイスを作成できます。これにより、ビュー/モデルはコントローラーに必要な情報を正確に渡すことができ、コントローラーの単体テストが容易になります。

モデルをリッスンするには、すべてを更新するのが最も簡単な解決策であり、パフォーマンスが問題になることが証明されない限り、それを行うことができます。

于 2012-06-05T13:17:55.053 に答える