2012-04-02 66 views
1

我使用的MVP设计模式,我已经注册了我的主持人为上的各种按钮和我的看法等互动元素的监听器。这工作正常,每当用户在GUI中执行某些操作时,我都会收到通知。通知主持人,该模型已经改变

但是我不把程序通知演示时模型的变化。我有来自服务器的数据(例如用户模型)进行处理,并更改我的用户对象的值。

你如何通知主持人,该模型在Java中有哪些变化?

让我的模型召开参考主持人和显式调用类似presenter.userObjectHasBeenUpdated()在我的模型我已经改变了用户对象之后?或者是否有一种方法可以在User对象上放置一个侦听器,并在用户对象被修改时自动调用presenter.userObjectHasBeenUpdated()

回答

5

我要说的是,你创建了一个观察员专用接口,你让你的演示实现它。然后,每个演示者都可以在模型对象上注册自己,以便在对象发生变化时通知他们。

public interface Observer { 
    public void update(Object notification, Object source); 
} 

,并在你的模型:

private List<Observer> observers = new ArrayList<Observer>(); 

public void addObserver(Observer observer) { 
    if (!observers.contains(observer)) { 
     observers.add(observer); 
    } 
} 

public void removeObserver(Observer observer) { 
    observers.remove(observer); 
} 

protected fireNotification(Object notification) { 
    for(Observer observer:observers) { 
     observer.update(notification, this); 
    } 
} 

当然你也可以通过添加线程安全性,输入您的通知等改善这一切......

+0

伟大工程欢呼队友。 – 2012-04-03 02:57:27