分离数据模型和gui表示的设计模式

net*_*ain 5 java oop user-interface design-patterns

在分离数据模型和gui绘图机制时,是否存在被认为是最佳模式的设计模式?

所以说我有一个类Circle和一个类Square,那么我很想在这两个类中都有一个draw方法.然而,这会迫使班级根据绘图画布使用(swing,j3d,opengl等)导入各种令人讨厌的东西.

我的第一个想法是访问者模式可以通过使Square和Circle实现一个方法来解决这个问题,该方法将访问者作为输入参数并调用访问者的函数.然后我可以在访问者上有两个绘制方法,它们将Circle和Square实例作为输入参数,并相应地绘制它们.

有什么建议吗?

Jes*_*Jes 6

模型视图控制器模式可能是最常用的.Swing在很大程度上依赖于这种模式,其中Decorator(用于诸如滚动条之类的东西)和策略(布局管理器等)似乎是支持模式.

至于MVC的替代方案,您可以查看模型视图展示器,但在大多数实现中,完全分离将严重依赖某种事件总线,例如在Observer(事件侦听器)模式中的Swing .

datamodel/gui的解决方案似乎是一个小问题,但实际上很难正确管理所述事件总线.

我最喜欢的做法是依靠Command模式.使用事件总线传递不同的命令使分离有点干净.datamodel以某种方式执行命令(通常使用相关的命令处理程序对象),然后调用回调.

这实际上是一个美化的MVC,因为执行命令的类最终成为您的控制器,但该模式允许模型/控制器只知道回调对象.根据程序的性质,您可以实现一组类,只有视图知道使用数据传输对象模式.这是我对GWT等异步应用程序的首选方法.

在桌面和Android应用程序中,您仍然运行异步(Context.runOnUiThread()SwingUtilities.invokeLater()指示这一点),因此命令模式适合.DTO是否是您的应用程序的最佳方法取决于,但他们肯定将模型与视图分开.


Lio*_*ana 3

没有“最好”的方法,这完全取决于你的平台、架构和其他东西。通常,当涉及到 GUI 时,应该组合几种模式。其中之一通常是MVC,其中视图可以使用其他层次结构模式进行扩展(访问者也是一个选项)。

  • 你说得对,卡拉,我更多地考虑的是班级水平。 (2认同)