gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:04 25 4
gpt4 key购买 nike

是否有一种设计模式被认为是分离数据模型和 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com