OOP:无法通知层次结构中的其他对象

时间:2009-12-05 19:23:31

标签: actionscript-3 oop hierarchy notify

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

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

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

点击答案时(我们在这里谈论Flash AS3):
答案通知AnswerList AnswerList通知问题 问题通知QuestionList QuestionList通知测验。

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

  • 点击答案(按钮),听取答案清单会注意到。
  • AnswerList会调度“已回答”事件,该事件由问题收到。
  • 问题调度“已回答”事件以通知问题列表将此问题标记为已回答
  • 当问题列表收到所有问题的回答事件时,会发送“已完成”事件以告知测验已完成

答案 1 :(得分:1)

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