簡體   English   中英

如何使用Java Observer的update(Observable,Object)函數?

[英]How to Use Java Observer's update(Observable, Object) Function?

我在Java中創建了一個基本的MVC模式,該模式使用Observable / Observer類/接口。

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.

我的問題是關於觀察者功能

update(Observable obs, Object arg);

這是一項功能,但是例如,在View中我要進行多種更新。 如何優雅地區分搜索結果的更新或其他信息的顯示? 這是兩個完全不同的更新,它們使用來自模型的不同對象。

我的第一個想法是使用Object傳遞一個字符串,該字符串描述所需的更新。

"UpdateResults" "DisplayAdditionalInformation" "AddQuestions"

但這似乎容易出錯並且很丑陋。 我的第二個本能是創建一個將作為對象傳遞的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

我的第三個想法是簡單地更新所有內容,但這似乎毫無意義。

我可能無法正確理解Observable / Observer接口,或者我未按照其作者的意圖使用update()。 因此,我的問題是,當我要處理許多不同類型的更新或事件時,如何正確使用update功能?

您可以根據要偵聽的視圖/模型來創建自己的Listener接口。 這使您的視圖/模型可以將所需的信息准確傳遞給控制器​​,並使對控制器進行單元測試變得更加容易。

對於偵聽模型,更新所有內容是最簡單的解決方案,並且除非性能證明是一個問題,否則您可以這樣做。

是的,我認為最好使用監聽器接口

檢查此說明http://www.softcoded.com/web_design/java_listeners.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM