Pergunta

Eu sempre lutar com o envio de mensagens entre objetos. Considere a hierarquia de objetos de um questionário:

  • Teste
    • QuestionList
      • Pergunta
        • AnswerList
          • Resposta

Assim:
um questionário tem um QuestionList
um QuestionList tem várias perguntas
uma pergunta tem um AnswerList
um AnswerList tem várias respostas

Quando uma resposta ganha clicado (estamos falando do Flash AS3 aqui):
notifica resposta AnswerList.
AnswerList notifica Pergunta.
Pergunta notifica QuestionList.
QuestionList notifica Quiz.

Em outras palavras, a mensagem borbulha. Isso é possível desde que eu passar cada objeto 'pai' pelo construtor dele é 'criança'. Mas eu acho que eu li em algum lugar que os objetos não deve estar ciente de que os pais. Devo tomar outra abordagem?

Graças.

Foi útil?

Solução

Sim, você não deve dar à criança objetos links para seu pai. Eu acho que você a situação que você explicado acima é uma hierarquia de exibição. Nesse caso, você poderia fazê-lo muito melhor usando o sistema de eventos. Você pode criar eventos personalizados que são despachados, quando as coisas acontecem e os pais gostaria de acrescentar ouvintes para eventos para cuidar deles.

Um cenário evento possível para a sua estrutura seria, por exemplo, ser a seguinte:

  • Resposta (um botão) fica clicado, e os avisos de escuta AnswerList isso.
  • O AnswerList despacha um "respondeu" evento, que é recebido pela pergunta.
  • A Questão despacha um "respondeu" evento para notificar a lista de perguntas para marcar esta pergunta como respondida
  • Quando a lista Pergunta recebeu eventos respondidas por todas as perguntas, ele despacha um evento "acabado" para dizer ao quiz, que ela seja concluída

Outras dicas

Você pode olhar para o Observer padrão. Neste padrão de design, os objetos podem escutar alterações (ou eventos) de um objeto. Desta forma, a bolha mensagens podem-se sem as crianças saberem seus pais diretamente. Eles apenas sabem que eles têm de notificar os seus ouvintes que algo mudou. Você mesmo pode ter vários objetos de ouvir as respostas, se quiser.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top