java - 分离数据模型和图形用户界面表示的设计模式

标签 java oop user-interface design-patterns

是否有一种设计模式被认为是分离数据模型和 GUI 绘图机制时使用的最佳模式?

假设我有一个 Circle 类和一个 Square 类,那么我很想在这两个类中都有一个 draw 方法。然而,这将迫使类导入各种讨厌的东西,具体取决于我使用的绘图 Canvas (swing、j3d、opengl 等)。

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

对此有什么建议吗?

最佳答案

Model View Controller模式可能是最常用的。 Swing 在很大程度上依赖于这种模式,其中 Decorator (用于滚动条等)和 Strategy (布局管理器等)似乎是支持模式。

关于 MVC 的替代方案,您可以查看 Model View Presenter ,但在大多数实现中,完全分离将在很大程度上依赖于某种事件总线,对于 Observer 中的 Swing (事件监听器)模式。

datamodel/gui 的解决方案看似是一个小问题,但要正确管理所说的事件总线实际上是相当困难的。

我最喜欢的方式是依赖 Command图案。使用事件总线传递不同的命令可以使分离更加清晰。 数据模型以某种方式执行命令(通常使用相关的命令处理程序对象),然后调用回调。

这实际上是一个美化的 MVC,因为执行命令的类最终成为您的 Controller ,但该模式允许模型/ Controller 只知道回调对象。根据您程序的性质,您可以实现一组类,只有 View 知道如何使用 Data Transfer Object图案。 这是我对异步应用程序(如 GWT)的首选方法。

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

关于java - 分离数据模型和图形用户界面表示的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7074775/

相关文章:

java - JPA 持续一段时间

java - Java Swing 中的自动完成文本框

c# - 为拼字游戏的游戏实现设计灵活且可扩展的奖励系统

java - SmartGwt 为 Selectitem 选择所有选项

java - @QueryParam 默认情况下在 jersey 2 @BeanParam 的所有属性上

java - Android 非静态 block 中的 init 方法

design-patterns - 使用类/方法的不同实现的设计模式

javascript - 实用的javascript面向对象设计模式示例

没有大量库依赖的 Python 消息框

python - 在pygame中制作图像 "fit to screen"?