J'ai actuellement une configuration Java Observer/Observable dans laquelle j'allume un champ dans le paramètre Object de Observer.update (par exemple ID d'événement) pour déterminer comment gérer une notification Observable.Conception de l'observateur - comment accéder à la méthode method.invoke?
cela crée un code bavard comme:
public void update (Observable o, Object arg) {
if (arg instanceof Event) {
switch (((Event)arg).getID()) {
case EVENT_TYPE_A:
// do stuff...
break;
case EVENT_TYPE_B:
// do stuff...
break;
case EVENT_TYPE_C:
// do stuff...
break;
}
}
}
provenant d'un arrière-plan ActionScript, cela se sent inutilement bavard me ... au lieu de passer une instance d'un observateur, je préfère passer une méthode de rappel être appelé directement par l'observable (plus précisément, par une sous-classe). Cependant, je ne sais pas comment déterminer l'objet sur lequel la méthode devrait être appelée (l'instance de classe qui 'possède' la méthode).
Je pourrais passer une référence à l'instance qui contient la méthode, mais cela sent mauvais OOP.
Est-ce que j'aboie le mauvais arbre? ou y a-t-il un moyen propre d'y parvenir?
Je vois votre dilemme; ce n'est pas le modèle d'observateur. Voir http://stackoverflow.com/questions/5423125/polymorphism-and-interfaces-in-java-can-polymorphism-be-used-to-implement-interf/5423860#5423860 –