我仍然试图了解实现MVC的正确方法是什么.此示例
@oracle表示该视图可以访问控制器.另一个教程
@leepoint表明该视图可以访问模型.这些是MVC的不同变体吗?在我的情况下,我在Oracle网站上进行了一些修改(我在AbstractController getModelProperty中添加了一个函数,这将允许我检索当前注册模型的字段的值,但我也可以感觉到它通过了model作为参数(如leepoint教程中所示),以简化并可能优化视图的数据访问.
提前致谢.
最佳答案 视图与模型绑定.由于视图渲染模型,他们必须对模型有深入的了解,因此根本无法解决.有些视图是通用的,它们具有“通用”模型.在这里,您可以尝试将实际模型与通用模型相符合,以便“通用”视图可以使用您的数据.但即使使用这些通用模型,视图仍然与它们紧密相关.
模型管理数据,状态.虽然视图对模型有深入了解,但模型与视图无关.它根本不在乎.这样,您可以为同一模型提供多个视图.
但是,模型必须告知其他人模型的更改.通常在java中使用PropertyChangeListener.这种机制让模型只是大肆宣传变化,任何有兴趣的人都可以倾听这些变化并采取行动,例如您的观点.
一个简单的例子是你的游戏对象可以从子弹中受到伤害,并且它会降低到50%以下.该视图可以看到健康状况已经减少并且改变了模型的图像(比如添加烟雾或其他).
Controller通常与视图和模型紧密绑定.它知道视图的功能(如它的大小和其他感兴趣的领域),并且知道如何更改模型.例如,当单击鼠标时,控制器将鼠标指针转换为相对于视图的坐标,并从中确定单击了哪个对象.一旦确定了被单击的对象,它就可以将对象的模型设置为“选中”.
然后该模型广播说它的“选定”属性已经改变.视图看到这一点,找到更改的模型的边界矩形,并使其显示的矩形无效.
最后,Java出现并告诉视图“嘿,Rect 10,10,100,100需要绘制”.并且视图在该rect中找到模型,用“选定”边框或其他任何东西绘制对象的新视图.
这就是整个周期的运作方式.