首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分离数据模型和gui表示的设计模式。

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

Stack Overflow用户
提问于 2011-08-16 15:18:19
回答 6查看 5.2K关注 0票数 6

在分离数据模型和图形用户界面绘制机制时,是否有一种设计模式被认为是最好的模式?

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

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

对此有什么建议吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-16 15:21:14

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

票数 3
EN

Stack Overflow用户

发布于 2011-08-16 16:12:38

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

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

数据模型/gui的解决方案看起来是一个小问题,但实际上很难正确地管理所述事件总线。

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

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

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

票数 6
EN

Stack Overflow用户

发布于 2011-08-16 15:37:14

我认为使用strategy pattern或composition可能会取得成功。

使用组合,您可以添加负责绘制的对象,无需将其定义到形状实例中;使用策略,您可以在运行时选择算法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7074775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档