0

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

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

所以:
一个测验有一个 QuestionList
一个 QuestionList 有多个 Questions
一个 Question 有一个 AnswerList
一个 AnswerList 有多个 Answers

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

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

谢谢。

4

2 回答 2

2

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

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

  • 答案(一个按钮)被点击,并且正在监听的 AnswerList 注意到了这一点。
  • AnswerList 调度一个“已回答”事件,该事件由问题接收。
  • 问题分派一个“已回答”事件来通知问题列表将此问题标记为已回答
  • 当问题列表收到所有问题的回答事件时,它会调度一个“完成”事件来告诉测验它已完成
于 2009-12-05T19:34:21.423 回答
1

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

于 2009-12-05T19:28:55.880 回答