Générique de rappel en Java
Ce que devrait être l'préférable Java
interface ou modèle similaire qui pourrait être utilisé comme un générique mécanisme de rappel?
Par exemple, il pourrait être quelque chose comme
public interface GenericCallback
{
public String getID();
public void callback(Object notification);
//or public void callback(String id, Object notification);
}
L'ID serait nécessaire pour les cas de surchargée hashCode()
méthodes de sorte que le destinataire de l'appel identifie l'appelant.
Un modèle comme ci-dessus est utile pour les objets que doit faire rapport à la classe à laquelle ils ont été générés à partir d'un état (par exemple, à la fin du traitement).
Dans ce scénario, le "parent" de la classe utiliser le getID()
méthode de chacune de ces GenericCallback
objets à garder une trace d'eux dans un Map<String, GenericCallable>
et les ajouter ou les supprimer selon la notification reçue.
Aussi, comment devraient-ils une interface en fait le nom?
Beaucoup de gens semblent préférer la Java modèle Observateur, mais le Observables classe défini, il n'est pas pratique, car il pas une interface de contourner l'héritage simple, et il a plus de fonctionnalités que nécessaire dans le ci-dessus, scénario simple.
- Euh, comment sur
Observer
docs.oracle.com/javase/7/docs/api/java/util/Observer.html etObservable
docs.oracle.com/javase/7/docs/api/java/util/Observable.html - "La pièce d'identité devrait être nécessaire pour les cas de surchargée hashCode() les méthodes de sorte que le destinataire de l'appel identifie l'appelant." Je ne comprends pas cette partie
- Si vous avez un "observables" de l'objet avec un hashCode() méthode qui modifie sa valeur de retour fondée sur l'état de l'objet, et vous gardez une trace de tous les objets observés dans une table de hachage (par exemple, pour être en mesure d'affirmer que lorsque tous ces objets ont fini de s'exécuter), puis vous ne pouvez pas correspondre tout suivi observables.
- Il est préférable d'utilisation spécifiques, sérieux types plutôt que général, les types de sens.
Vous devez vous connecter pour publier un commentaire.
Je vous recommande d'utiliser pattern observer depuis le pattern observer est le "gold standard" dans le découplage - la séparation des objets qui dépendent les uns des autres.
Mais je vous conseille d'éviter l'emploi d' Java.util.Observables classe si vous êtes à la recherche pour un générique mécanisme de rappel. Parce que Observable a quelques faiblesses: il n'est pas une interface, et vous oblige à utiliser des Objets pour représenter les événements.
Vous pouvez définir votre propre écouteur d'événement comme ceci:
listeners
avant d'essayer d'exécuter des méthodes de rappel.Je genericize le rappel, basé sur le type de l'Objet passé. Ceci est particulièrement utile pour EventListeners d'écoute pour différentes classes d'événements. par exemple,
Vous peut être en mesure d'utiliser le type T comme clé dans une Carte. Bien sûr, si vous voulez faire la différence entre deux rappels qui prennent le même argument, comme une Chaîne de caractères, alors vous auriez besoin de quelque chose comme votre
getID()
.Voici mon ancien blog sur l'utilisation de ce pour des Écouteurs d'Événement L'interface Les événements.Auditeur correspond à
Callback<T>
ci-dessus. Et Les radiodiffuseurs utilise une Carte à garder la trace de plusieurs auditeurs en fonction de la catégorie qu'ils acceptent comme argument.dirait que vous voulez implémenter le pattern observer. Dans cette url est une implémentation complète pour le pattern observer en Java. Dans votre cas, l'observateur sera le rappel.
Aussi, Si vous avez besoin de mettre en œuvre quelque chose de plus complexe, vous finirez par faire un événement/notifiant le motif. Jetez un oeil à cet autre modèle ici.
Grâce,
@leo.