【问题标题】:How to connect a Morph to an Object that it is supposed to visualize in Morphic?如何将 Morph 连接到它应该在 Morphic 中可视化的对象?
【发布时间】:2012-10-12 11:02:08
【问题描述】:

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

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

【问题讨论】:

    标签: smalltalk squeak pharo morphic


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,这是一个非常容易理解的答案。我读了很多关于“观察者模式”和 MVC 的内容,我认为做其他任何事情一定是一个非常糟糕的主意,但你所描述的似乎非常合理和直接作为我的问题的解决方案。
    【解决方案2】:

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

    很多框架都是基于这种模式构建的,因为它打破了对象之间的依赖关系并简化了很多。


    另外,Pharo 有一个包 Announcements: an Object Dependency Framework

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-20
      • 2019-02-28
      • 2011-04-06
      • 2011-04-14
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多