【问题标题】:Implementing MVC and Observer Pattern [closed]实现 MVC 和观察者模式
【发布时间】:2015-02-12 15:59:47
【问题描述】:

对于学校的小组项目,我们必须编写一个实现 MVC 模式的程序。

我遇到的困难是理解MVC模式是如何在Java中用SWING实现的,视图是否构成了SWING组件?

我很难理解的另一件事是什么更新了什么。例如,一篇文章说视图“执行”控制器,然后控制器相应地更新模型,模型通知视图,然后视图从模型中提取数据。

虽然我对 MVC 模式的了解是控制器具有模型和视图的实例,因此它可以与两者进行交互。但是如果我在视图中按下一个按钮,控制器怎么知道对模型做些什么呢?对于这个例子,哪些类是观察者,哪些类是观察者?

我的另一个想法是,如果我们使用上述 MVC 模式,则视图是 Observer,模型是 Observable,但这仍然留下了一个问题,控制器如何知道何时更新模型?

如果看起来含糊不清,请在 cmets 中要求澄清,我会回答。

【问题讨论】:

  • 请您格式化您的问题以便阅读?
  • @almasshaikh 好点了吗?
  • 我认为您需要更清楚您的确切问题是什么。目前这个问题太宽泛了。你能把范围缩小一点吗?

标签: java swing model-view-controller observer-pattern


【解决方案1】:

View 与控制器通信,控制器与模型通信,反之亦然。

假设您有一个模型类Graph,其中包含图形的点。您的视图目的是显示该图表。 Graph 类将是 控制器 观察到的 Observable。如果控制器观察到变化,它将相应地告诉视图更新/变化。如果您按下视图上的按钮,例如显示不同的图形对象,您的按钮会有一个actionListener,要求控制器更改图形。

是的,您的视图类将创建 Swing 组件。

【讨论】:

  • 所以在actionListener我有一个controller的实例,但是控制器需要一个视图的实例以便它可以更新视图,我该如何编程呢?
  • 视图由控制器创建(并且可能保存在字段中)。
  • 但是如何从视图中与控制器进行交互?
  • 您可以在控制器内部调用视图的构造函数View myView = new View(this) 时将控制器作为参数传递。然后视图可以对控制器对象进行处理。如果您想通过按一下按钮来实现某些事情,请查看我在原始答案中链接的actionListener 页面。
猜你喜欢
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2010-09-23
  • 2012-05-11
相关资源
最近更新 更多