如何在Java observable(MVC)中观察同一类的多个数据?

如何在Java observable(MVC)中观察同一类的多个数据?

问题描述:

这是我想到的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

我不完全知道你正试图在这里做的,但如果你有一个延伸的类可观察那么它可以为任何原因触发一个更改事件。如果你只是想在任何值改变时通知观察者,那么你只需要在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

在Observer类上创建两个引用,并且您可以像这样使用update命令。

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