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

sda*_*das 9 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.
    }

}
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我的模型变得越来越复杂 - 它开始保持其他类的列表:

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

public class Person {
    private String name = "";
    // ... getter / setter for name
}
Run Code Online (Sandbox Code Playgroud)

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

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

Cra*_*lus 4

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

  • 如果您需要在“Person”的属性更新时收到通知,您应该查看“PropertyChangeListener”,这是 MVC 设计中的标准方法,例如“Swing”http://docs.oracle.com/javase/tutorial/ uiswing/events/propertychangelistener.html (2认同)