2009-12-05 52 views
0

我总是很难在对象之间发送消息。考虑测验的对象的层次结构:OOP:在层次结构中通知其他对象的麻烦

  • 测验
    • QuestionList
      • 问题
        • AnswerList
          • 回答

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

当点击答案(我们在这里说的是Flash AS3):
答复通知AnswerList。
AnswerList通知问题。
问题通知QuestionList。
QuestionList通知测验。

换句话说,消息气泡。这是可能的,因为我通过它的'孩子'的构造函数传递每个'父'对象。但我认为我在某个地方看到物体不应该知道它的父母。我应该采取另一种方法吗?

谢谢。

回答

2

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

您结构的可能的事件情况将是,例如,以下内容:

  • 答案(按钮)被点击,并聆听AnswerList注意到。
  • AnswerList调度问题接收到的“回答”事件。
  • 问题分派“回答”的事件,通知问题清单的回答
  • 当问题清单已通过所有问题收到答复的事件,它分派“完成”事件告诉测验,它以纪念这个问题已完成
1

您可能会看到Observer模式。在这种设计模式中,对象可以侦听对象的变化(或事件)。通过这种方式,这些信息可以在没有孩子直接了解他们父母的情况下发生。他们只知道他们必须通知他们的听众有什么变化。如果需要,甚至可以让多个对象侦听答案。