在Java中使用Observer和Observable的模型是不是很糟糕?

时间:2012-11-04 21:10:02

标签: java model-view-controller

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

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改变时,他会通知他的观察者(包括父模型)。

然而,如果我的模型变得复杂,这似乎很多工作。是否有更好的方法可以对父模型进行“冒泡”更改?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

您始终可以将子类delegate包含在Observable的包含实例中。其他一些实现observer模式的方法是here