9

这个问题与 MVC(模型-视图-控制器)有关。我的模型当前使用 Java 中的 Observer / Observable 模式更改了我的视图:

public class Model extends Observable {
}

public class View implements Observer {

    @Override
    public void update(observable o, Object obj) {
        // ... update the view using the model.
    }

}

这工作正常。但是,我的模型变得越来越复杂 - 它开始包含其他类的列表:

public class Model extends Observable {
    List<Person> people = new ArrayList<Person>();
}

public class Person {
    private String name = "";
    // ... getter / setter for name
}

我的问题是:当一个人的名字改变时,我想更新监听包含那个人的模型的视图。我能想到的唯一方法是让 Model 实现一个 Observer 类并让 Person 扩展一个 Observable 类。然后,当 Person 发生变化时,他会通知他的观察者(包括父模型)。

但是,如果我的模型变得复杂,这似乎需要做很多工作。有没有更好的方法来“冒泡”对父模型的更改?

4

2 回答 2

4

首先,通常使用它是一个坏主意,Observable因为您需要扩展此类才能使用它。
无论如何,您所描述的是观察到的实体的聚合。
不要把简单的事情复杂化。使每个实体成为可观察的,并让它负责注册和通知。您不必专门包含一个名为Model聚合所有内容的类。打破你的设计。

于 2012-11-04T21:21:12.717 回答
1

您始终可以让您的子类委托Observable. 这里提到了其他一些实现观察者模式的方法。

于 2012-11-04T21:35:03.060 回答