我总是很难在对象之间发送消息。考虑测验对象的层次结构:

  • 测验
    • 问题列表
      • 问题
        • 答案列表
          • 回答

所以:
测验有一个问题列表
一个问题列表有多个问题
问题有答案列表
一个 AnswerList 有多个答案

当点击答案时(我们这里讨论的是 Flash AS3):
答案通知AnswerList。
AnswerList 通知问题。
问题通知问题列表。
QuestionList 通知 Quiz。

换句话说,消息会冒泡。这是可能的,因为我通过每个“父”对象的“子”对象的构造函数传递该对象。但我想我在某处读到过,对象不应该知道它的父对象。我应该采取另一种方法吗?

谢谢。

有帮助吗?

解决方案

是的,您不应该为子对象提供指向其父对象的链接。我猜你上面解释的情况是显示层次结构。在这种情况下,您可以使用事件系统做得更好。您可以创建自定义事件,当事情发生时,父级会向事件添加侦听器来处理这些事件。

例如,您的结构的可能事件场景如下:

  • 点击“Answer”(一个按钮),侦听的 AnswerList 会注意到这一点。
  • AnswerList 调度一个“已回答”事件,该事件由问题接收。
  • 问题调度“已回答”事件以通知问题列表将此问题标记为已回答
  • 当问题列表收到所有问题的已回答事件时,它会发送一个“完成”事件来告诉测验它已完成

其他提示

你可能会看看 观察者 图案。在此设计模式中,对象可以侦听对象的更改(或事件)。这样,消息就可以在孩子们不直接认识他们的父母的情况下冒泡。他们只知道必须通知听众某些事情发生了变化。如果需要,您甚至可以让多个对象监听答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top