Frage

Ich kämpfe immer mit Nachrichten zwischen Objekten zu senden. Betrachten Sie die Hierarchie von Objekten eines Quiz:

  • Quiz
    • Fragen
      • Frage
        • AnswerList
          • Antwort

So:
ein Quiz hat eine Frage
ein Fragen hat mehrere Fragen
eine Frage hat eine AnswerList
ein AnswerList mehrere Antworten hat

Wenn eine Antwort geklickt wird (wir sprechen Flash-AS3 hier):
Antwort benachrichtigt AnswerList.
AnswerList benachrichtigt Frage.
Frage benachrichtigt Fragen.
Fragen benachrichtigt Quiz.

Mit anderen Worten, blase die Nachricht auf. Dies ist möglich, da ich jedes ‚Eltern‘ Objekt durch den Konstruktor von ihm ist ‚Kind‘ übergeben. Aber ich glaube, ich habe irgendwo gelesen, dass Objekte es Eltern nicht bewusst sein sollten. Sollte ich einen anderen Ansatz?

Danke.

War es hilfreich?

Lösung

Ja, Sie sollten nicht geben das Kind sich Links zu ihren Eltern. Ich denke, man die Situation, die Sie oben erläutert ist eine Anzeigehierarchie. In diesem Fall könnte man es viel besser macht das Event-System. Sie können benutzerdefinierte Ereignisse erstellen, die ausgelöst werden, wenn Dinge passieren, und die Eltern würden Zuhörer Ereignisse hinzufügen zu kümmern davon.

Ein mögliches Ereignis Szenario für Ihre Struktur wäre zum Beispiel die folgende:

  • Antwort (eine Taste) wird angeklickt, und das Zuhören AnswerList bemerkt, dass.
  • Der AnswerList löst eine „beantwortet“ Veranstaltung, die von der Frage empfangen wird.
  • Die Frage löst eine „beantwortet“ Ereignis die Fragenliste zu markieren, diese Frage als beantwortet
  • benachrichtigen
  • Wenn die Fragenliste beantwortet Ereignisse von allen Fragen erhalten hat, es löst ein „fertig“ Ereignis das Quiz zu sagen, dass es abgeschlossen ist

Andere Tipps

Sie können an den Observer Muster. In diesem Entwurfsmuster können Objekte für Änderungen (oder Ereignisse) ein Objekt hören. Auf diese Weise, die Nachrichten können sprudeln ohne ihre Eltern zu wissen Kinder direkt. Sie wissen nur, dass sie ihre Zuhörer zu informieren haben, dass sich etwas geändert hat. Sie können sogar mehrere Objekte hören Antworten haben, wenn Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top