2011-01-16 4 views
0

En ce moment, je fais une bibliothèque Gui pour les jeux. Les Widgets ont plusieurs rappels/écouteurs pour divers événements. La chose à ce sujet est qu'un auditeur peut consommer un événement.Est-ce un bon design?

Le problème vient ici. La classe de base est appelée avec des informations sur l'événement. Il appelle les rappels pour les auditeurs. Chacun d'eux peut gérer l'événement.

Cela signifie que c'est à l'utilisateur de vérifier si l'événement a été traité ou non.

Ex:

void TextBox::MouseClick(MouseEvent &event) 
{ 
    Widget::MouseClick(event); 

    if(!event.isHandled()) 
    { 
     //do stuff 
    } 

} 

L'alternative serait de cacher et ont OnMouseClick (...) qui est le virtuel et non appelé à moins que la condition est remplie. J'ai trouvé que c'était plutôt désordonné, et ennuyeux pour ceux qui font plus d'événements.

Est-ce un bon design? Si ce n'est pas ce qui pourrait être mieux pour accueillir cela?

Merci

+1

Lequel faire vous voulez savoir si c'est un bon design? Votre segment de code cité est une façon assez normale de s'y prendre. Vous pourriez trouver le 'visiteur higharchal' (vérifier google) pour être intéressant ... peut-être .. –

+0

bien je préfère l'ancien puisque le dernier, onMouseClick() semble malpropre – jmasterx

Répondre

1

Si vous voulez faire cela pour de nombreux événements, je préfère aller le chemin onMouseClick (IIUC):

void TextBox::onMouseClick(MouseEvent &event) 
{ 
     //do stuff or empty of not needed 
} 

en classe Widget:

void Widget::MouseClick(MouseEvent &event) // nonvirtual 
{ 
    // do the listeners' stuff 
    if(event.isHandled()) onMouseClick(event); 
} 
Questions connexes