最干净的方法是让控制器监听视图。反过来,视图可以告诉控制器需要发生的事情。
这是一个可以编译和运行的全功能示例
简而言之,它归结为这一点。
在这个例子中,我们假设控制器已经作为观察者添加到视图中。
将通知其观察者(控制器)的视图。
class CreatePersonView extends Observable implements View {
public void display() {
System.out.println("\nWelcome to the create person view!");
System.out.println("----------------------------------");
System.out.print("Name: ");
String name = System.console().readLine().trim();
System.out.print("Age: ");
int age = Integer.valueOf(System.console().readLine().trim());
Map<String, Object> data = new HashMap<String, Object>();
data.put("name", name);
data.put("age", age);
// generate the event
setChanged();
notifyObservers(data);
}
}
将使用事件的控制器。
class Controller implements Observer {
PersonService service;
public void setPersonService(PersonService service) {
this.service = service;
}
// simplified version
public void update(Observable sender, Object arg) {
Map data = (Map)arg;
Person p = service.create((String)data.get("name"), (Integer)data.get("age"));
//debug
System.out.println("Created new person: " + p);
}
}
这里的主要好处是控制器对视图的实现一无所知,反之亦然。使它们松散耦合和可互换。这是 MVC 的全部目的。