通知演示者模型已更改

Jim*_*_CS 2 java mvp observable

我正在使用MVP设计模式,我已经将我的演示者注册为我视图中各种按钮和其他交互元素的监听器.这很好用,每当用户在GUI中执行某些操作时,我都会收到通知.

但是,我没有在模型更改时通知演示者的过程.我从一个服务器进入数据,该服务器在例如User模型中处理,并更改我的User对象的值.

如何通知演示者模型在Java中已更改?

我是否让我的模型持有对演示者的引用,并presenter.userObjectHasBeenUpdated()在我更改了User对象后显式调用了我的模型中的内容?或者有没有办法在User对象上放置一个侦听器,presenter.userObjectHasBeenUpdated()当User对象被修改时会自动调用?

Gui*_*let 6

我会说你创建一个像Observer这样的专用界面,你让你的演示者实现它.然后,每个演示者都可以在模型对象上注册自己,以便在对象发生变化时得到通知.

public interface Observer {
     public void update(Object notification, Object source);
}
Run Code Online (Sandbox Code Playgroud)

在你的模型中:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以通过添加Thread-safety,输入通知等来改善这一切......