【发布时间】:2014-02-25 06:01:03
【问题描述】:
在java中,你可以让模型扩展Observable类,并让视图实现Observer接口,以实现具有观察者模式的MVC,例如:
public AppView implements Observer{
public void update(Observable arg0, Object arg1) {
System.out.println((int)arg1);
}
}
public AppModel extends Observable{
public void doStuff(){
x = x +1;
setChanged();
notifyObservers(x);
}
}
现在,当模型只需要更新一个变量到视图时,上面的例子没有问题。当我需要通知视图超过 1 个变量的变化时,事情通常会变得丑陋或复杂。有没有一种干净的方法来解决这个问题?例如,我需要通知整数值和字符串的更改。
编辑
我知道一些解决方案来处理这个问题。我只是想听听您对最佳方法的意见。
答案是:
notifyObservers("x");
这将告诉视图更新 x。 另一个是模型自己传递
notifyObservers();
视图会检查这些值。如果您有其他方法,欢迎使用。
【问题讨论】:
-
我会将 Observer/Observable 视为旧的、设计不佳的类,并改用 PropertyChangeListener。
-
@JBNizet:当您的评论弹出时,我只是将其输入到我的答案中!我确实喜欢 PropertyChangeEvent 对象的设置方式。
-
@HovercraftFullOfEels:我已经支持你的回答了 :)
-
@JBNizet:谢谢!如果您需要在 EDT 上工作的 Swing 实现,那么拥有 SwingPropertyChangeSupport 也很好。
-
视图必须反映模型的状态——视图如何知道何时或改变什么?通过直接或间接通过控件观察模型。
标签: java model-view-controller observer-pattern