1

假设我有 Bird 类和 BirdMorph 类。鸟有一个位置,我希望 BirdMorphs 改变它们在屏幕上的位置,只要相应的鸟改变它的位置。

将 Morph 连接到它应该在 Morphic 中可视化的对象的预期方法是什么?

4

2 回答 2

4

通常,BirdMorph 会将 Bird 保存在实例变量中,并在其step方法中更新自己的位置。

可以这样想:每个对象都需要在某个地方“持有”。如果没有对它的引用,它会自动被垃圾收集。在 Morphic 中,该引用通常植根于World,每个 morph 都通过其容器的submorphs集合进行引用。

因此,您的变形坚持“域模型”是有道理的。例如,您可能有一个包含所有鸟类的 BirdSimulation 对象,以及一个保存 BirdSimulation 的屏幕窗口。然后,当您关闭窗口时,模拟对象也将消失。

如果您的程序主要是可视化的,您甚至可能不需要单独的 Bird 类。相反,变形可能只是一只鸟”。这可以大大简化设计。

于 2012-10-12T16:11:16.927 回答
2

恕我直言,您的第一个想法是正确的:MVC 是要走的路。持有从 BirdMorph 到其 Bird 模型的引用似乎是最简单的方法,但是使用 观察者模式, 您的 BirdMorph 是您的 Bird 的“观察者”:BirdMorph 在创建时将自己注册到 Bird 以通知每个事件。每当鸟移动时,它都会通知所有观察者他的移动。因此,您可以为鸟设置多个观察者,例如,一个 Morph 用于显示(位置和其他),一个用于记录(例如,网络对等体)等......代码中的“硬”引用更少,spagethi 更少。

许多框架都建立在这种模式之上,因为它打破了对象之间的依赖关系并简化了很多。


另外,Pharo Announcements 中有一个包 :对象依赖框架

于 2012-10-27T22:51:50.057 回答