2012-08-16 34 views
2

這是我想到的2個選項。如何在Java observable(MVC)中觀察同一類的多個數據?

  1. 有多個模型,每個代表一個類。如果我有2個int 對象,我需要創建2個可觀察對象並檢查哪些可觀察對象被更改。

  2. 在單個可觀測(模型)中,將同一個 類的多個對象組合到Array中。鑑於我將不得不遍歷數組,並更改包含數組中所有數據的所有字段。

我開始學習如何使用java observable和observer來實現MVC模式。我發現我提到的兩種方法並不是最好的解決方案。希望能得到一些幫助。

編輯: 例如,我有以下方法可觀察類,可有人告訴我如何寫在觀察者的update()方法來獲得INT b的值?

public void setIntA(int a){ 
    this.intA = a; 
    setChanged(); 
    notifyObservers(a); 
} 
public void setIntB(int b){ 
    this.intB = b; 
    setChanged(); 
    notifyObservers(b); 
} 
setIntA(5); 
setIntB(3); 
+0

這個問題有點不清楚。但請注意,觀察者在通知中獲取兩個參數,目標Observable和一個完全由您決定的可選額外對象。也許你可以利用它(例如傳遞字段名稱)。 – Thilo 2012-08-16 10:03:41

+0

你有沒有找到這個@phatez的答案? – 2017-04-26 13:25:06

回答

0

我不完全知道你正試圖在這裏做的,但如果你有一個延伸的類可觀察那麼它可以爲任何原因觸發一個更改事件。如果你只是想在任何值改變時通知觀察者,那麼你只需要在setter中調用setChanged()和notifyObservers()。 就像Thilo所說的,你可以通過改變參數 notifyObservers();

public void setIntA(int a){ 
    this.intA = a; 
    setChanged(); 
    notifyObservers(a); 
} 

我建議你務必閱讀Javadoc徹底得到觀察和可觀察的最好理解。

+0

是我明白這一點。但是如果我想設置IntB呢。在我notifyObservers(b)後,當我在觀察者中調用update()時,如何知道該值是否來自int a或b? – phatez 2012-08-16 12:16:34

+0

你可以調用'notifyObservers(「a」)' – Thilo 2012-08-16 23:16:35

+0

我修改了我的問題。希望現在更清楚。 – phatez 2012-08-17 02:32:34

0

在Observer類上創建兩個引用,並且您可以像這樣使用update命令。

public void update(Observable o, Object arg) 
{ 
    if (o == a) 
    { 
    //do what you want with arg 
    } 
} 
相關問題