gpt4 book ai didi

java - 用于将模型与其图形表示分离的设计模式

转载 作者:行者123 更新时间:2023-11-30 04:15:34 24 4
gpt4 key购买 nike

问题

我正在寻找(希望)一种我可能不知道的设计模式,它可以帮助完成我在下面定义的问题的一些代码分离:

我有一组类,表示属于 2D 的各种实体,例如 PointVectorArc 等笛卡尔平面,由类 Model 表示。 Model 类充当这些实体的集合并存储有用的计算值。

我还有一个可视化界面,它应该渲染模型状态的 2D 图像,并且还可以通过向模型添加实体来与模型进行小程度的交互(例如,用户可以添加一个 通过单击 GUI 中的某处来指向模型。)。

第一个想法

首先,我有一个接口(interface) Drawable,它有一个方法 Draw,它接受图形上下文对象,并且实现实体会将自身绘制到该上下文使用我正在使用的图形库(在本例中为 Java Swing/AWT)。

这很有效,因为我的应用程序的 GUI 部分只需循环遍历模型中的所有实体并运行它们的 Draw 方法即可生成可视化效果。最大的问题是我将模型与其图形表示结合起来,我觉得这种做法很糟糕。

第二个想法

我创建了一个 EntityDrawer 类,它接受一个实体,根据实体的类型选择正确的绘制方法,然后绘制到我的图形上下文。

这种方法实现了我一直在寻找的代码分离,但是 EntityDrawer 类严重依赖 instanceOf/isA 方法来确定如何绘制实体,我多次看到这种设计被描述为糟糕的设计。我尝试重新设计它,以便该类使用重载方法来确定要使用哪种绘图方法,但我意识到这基本上与以更好看的方式编写的 instanceOf/isA 方法相同方式。另外,对于我添加的每个新实体类,我都需要在这个 EntityDrawer 的代码中进行镜像,这对我来说就像是一种耦合形式。

<小时/>

我希望模型与其图形表示之间尽可能多地解耦,以便模型可以专注于对问题建模,而不是如何将自身渲染到图形上下文。此外,我将来可能会添加更多模型实体类型,这些类型将具有截然不同的绘图需求。

那么,我可以使用某种模式或设计技术来实现这一目标吗?我觉得我提出的两个解决方案都不是最优的,并且可能有一种设计模式可以完全解决此类问题。

最佳答案

在我看来,您缺少模型、 View 、 Controller (或 MVC)设计模式的 Controller 部分。

Controller 将与模型通信,并与 View (您的图形部分)通信,这允许您的 View 和模型彼此独立。

以下是该主题的一些其他相关阅读 Material : http://www.oracle.com/technetwork/articles/javase/index-142890.html

关于java - 用于将模型与其图形表示分离的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18495204/

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