我的模型在我的 MVC 模式中,在运行时生成组件并通过 update() 方法将它们提供给视图以显示在屏幕上(你知道,模型是可观察的,视图是观察者)。但是我还需要给这些组件添加监听器,并且控制器有监听器方法(因为他们说MVC模式是这样的)并且它不参与这个更新过程。所以我不能在运行时添加监听器,只能在启动时在控制器的构造函数中添加。
我有一个想法,就是让控制器成为观察者,然后将数据提供给视图,并添加监听器。你觉得这样可以吗?
我的模型在我的 MVC 模式中,在运行时生成组件并通过 update() 方法将它们提供给视图以显示在屏幕上(你知道,模型是可观察的,视图是观察者)。但是我还需要给这些组件添加监听器,并且控制器有监听器方法(因为他们说MVC模式是这样的)并且它不参与这个更新过程。所以我不能在运行时添加监听器,只能在启动时在控制器的构造函数中添加。
我有一个想法,就是让控制器成为观察者,然后将数据提供给视图,并添加监听器。你觉得这样可以吗?
我想你可能有一些电线交叉。
#3 意味着来自视图的用户交互应该调用控制器类中注册的侦听器,然后更新模型状态。
这是“经典”的 Swing MVC。
(来源:sun.com)
一个“修改过的” Swing MVC(由其他一些关于这个问题的答案推荐),让控制器扮演中介者的角色。
在此设计中,当用户执行操作时,视图会在控制器上调用适当的方法。然后,控制器访问模型(可能更新它)。最后,如果模型被更改,它会通知感兴趣的侦听器(在本例中为控制器)。
这是一个“修改过的”MVC。
(来源:sun.com)
第二种设计(“修改的”MVC)允许模型和视图非常明显的解耦。
有关更多信息,请查看有关 Java Swing MVC的这篇文章。这是梦幻般的。
是的,在我看来,让控制器成为模型观察者以允许它更新视图将完全符合 MVC 的正统观念。
例如,在摇摆中,控制器/动作侦听器是视图(按钮等)的观察者,并且在调用按钮时(即,当视图更改时)控制器启动并与模型交互并再次更新视图(使用新模型更改)
所以你最后的建议对我来说确实有意义:)