2009-12-05 105 views
0

我總是很難在對象之間發送消息。考慮測驗的對象的層次結構:OOP:在層次結構中通知其他對象的麻煩

  • 測驗
    • QuestionList
      • 問題
        • AnswerList
          • 回答

所以:
測驗有QuestionList
一個QuestionList有多個問題
一個問題有一個AnswerList
一個AnswerList有多個答案

當點擊答案(我們在這裏說的是Flash AS3):
答覆通知AnswerList。
AnswerList通知問題。
問題通知QuestionList。
QuestionList通知測驗。

換句話說,消息氣泡。這是可能的,因爲我通過它的'孩子'的構造函數傳遞每個'父'對象。但我認爲我在某個地方看到物體不應該知道它的父母。我應該採取另一種方法嗎?

謝謝。

回答

2

是的,你不應該給子對象鏈接到他們的父母。我想你上面解釋的情況是顯示層次結構。在這種情況下,使用事件系統可以做得更好。您可以創建派發的自定義事件,當事情發生時,父母會將偵聽器添加到事件中以處理這些事件。

您結構的可能的事件情況將是,例如,以下內容:

  • 答案(按鈕)被點擊,並聆聽AnswerList注意到。
  • AnswerList調度問題接收到的「回答」事件。
  • 問題分派「回答」的事件,通知問題清單的回答
  • 當問題清單已通過所有問題收到答覆的事件,它分派「完成」事件告訴測驗,它以紀念這個問題已完成
1

您可能會看到Observer模式。在這種設計模式中,對象可以偵聽對象的變化(或事件)。通過這種方式,這些信息可以在沒有孩子直接瞭解他們父母的情況下發生。他們只知道他們必須通知他們的聽衆有什麼變化。如果需要,甚至可以讓多個對象偵聽答案。