Tout d'abord, présentons ce qu'est un auditeur:
Écouteur - est un programme Java ordinaire qui implémente l'interface en attente. Ce programme est spécifiquement utilisé pour écouter les appels de méthode d'une autre classe.
Cela utilise le mode observateur.
Qu'est-ce que le mode observateur:
Définit une dépendance un à plusieurs entre les objets. Lorsque l'état d'un objet change, tous les objets qui en dépendent sont informés de mettre à jour automatiquement.
Exemple:
La programmation addxxxxxListener dans GUI est en tout mode observateur.
Par exemple, l'ajout d'événements d'écoute aux clics du bouton, l'ajout d'événements d'écoute au clavier, etc.
Trois catégories importantes de modèle d'observateur:
La source de l'événement est écoutée, c'est-à-dire l'objet que nous utilisons.
L'auditeur enregistré est spécifiquement utilisé pour écouter les objets actuellement utilisés.
L'événement de l'objet de l'événement est l'objet écouté!
Regardons d'abord une version simple du moniteur écrit par vous-même.
Version simple:
Il existe des sources d'événements, des auditeurs et des cours de test.
L'événement sera implémenté dans la prochaine version complète.
Étapes de développement:
Étape 1: Implémentez une personne de classe qui doit être écoutée.
Étape 2: Implémentez une interface d'écoute IpersonRunListener.
Étape 3: Dans la classe de personne, fournissez une méthode (ou multiple, je fournis 2 méthodes ici) pour enregistrer les classes IpersonRunListener, c'est-à-dire addBefore et AddAfter
Étape 4: L'instance de la classe IpersonRunListener doit être maintenue dans la classe de personne.
Étape 5: Lors de l'appel de la méthode Person.Run, déterminez si le IpersonRunistener est nul et s'il n'est pas nul, appelez sa méthode de combat.
Étape 6: Dans la classe de démonstration, instanciation personne et enregistrez un auditeur.
Personne:
package cn.hncu.designPattern1; Personne de classe publique {nom de chaîne privée; Écouteur privé IpersonRunListener1; Écouteur privé IpersonRunListener2; Public (nom de chaîne) {super (); this.name = name; } public void run () {if (écouteur1! = null) {auditeur1.fighting (); } System.out.println (nom + "run ..."); if (écouteur2! = null) {écouteur2.Fighting (); }} public void addBefore (écouteur iponserunListener) {this.Listener1 = écouteur; } public void addAfter (écouteur iponserunListener) {this.Listener2 = écouteur; }} interface ipersonrunListener {public void combats ();}Démo
package cn.hncu.designPattern1; Demo de classe publique {public static void main (String [] args) {personne personne = new personne ("zhang san"); IpersonRunListener écouteur = new ipersonRunListener () {@Override public void Fighting () {// Il y a beaucoup de choses que vous pouvez faire ici, non seulement la sortie // Cependant, puisque vous n'avez pas encore écrit l'objet de l'événement, vous ne pouvez pas obtenir le System.out.println ("Soyez préparé pour cela d'abord ..."); }}; personne.addbefore (auditeur); A a = nouveau a (); personne.Addafter (a); personne.run (); }} classe A implémente ipersonRunListener {@Override public void Fighting () {// Il y a beaucoup de choses que vous pouvez faire ici, non seulement la sortie // Cependant, puisque vous n'avez pas encore écrit l'objet de l'événement, vous ne pouvez pas obtenir le System.out.println appelé par qui il était ("Run, repos ..."); }}Sortir:
Ajoutez une source d'événement dans la version complète:
Ici, un objet d'événement d'événement a été ajouté à la précédente. Il est considéré comme la version complète.
Étapes de développement:
Étape 1: Continuez à ajouter une classe personèvre basée sur la page précédente (notez que j'ai dit que c'est une classe, pas une interface), représentant l'objet de l'événement.
Étape 2: Ajoutez un attribut de personne à l'objet personvent pour identifier l'objet source d'événement.
Étape 3: Modifiez la méthode de combat de l'interface PersonListener et laissez-la recevoir un paramètre personvent.
Étape 4: Dans la méthode d'exécution de la classe de personne, s'il est déterminé que la propriété PersonListener n'est pas vide, la méthode de combat est appelée, le personèvre est instancié et la méthode de combat est transmise à la méthode de combat.
Étape 5: Dans la méthode principale, testez si c'est le même objet via la méthode GetSource de Personvent.
Personne.java
package cn.hncu.designPattern2; Personne de classe publique {nom de chaîne privée; Écouteur privé IpersonRunListener; Public (nom de chaîne) {super (); this.name = name; } public void run () {System.out.println (nom + "Démarrer en cours d'exécution ..."); if (auditeur! = null) {auditeur.Fighting (new personvent (this)); }} public void addPersonListener (ipersonRunListener écouteur) {this.Listener = écouteur; } public String getName () {Nom de retour; } @Override public String toString () {return "personne [name =" + name + ", écouteur =" + écouteur + "]"; }} interface ipersonRunListener {public void combats (personvent pe);} classe personvent {personne p = null; public personvent (personne p) {this.p = p; } public String getName () {return p.getName (); } Objet public getSource () {return p; }} // Nous pouvons également écrire une classe de base qui nous aide à implémenter l'interface // Il écrit notre modèle commun. Si nous héritons de cette classe, nous pouvons arrêter de l'écrire. // S'il existe différentes fonctions, nous l'écrivons nous-mêmes pour remplacer cette classe de défaut de défaut de DefaultCatListener implémente ipersonrunListener {@Override public void combats (personvent pe) {System.out.println ("Action par défaut ..."); }}Démo.java
package cn.hncu.designPattern2; classe publique Demo {public static void main (String [] args) {personne p1 = new personne ("zhang san"); Personne p2 = nouvelle personne ("jack"); IpersonRunListener écouteur = new ipersonRunListener () {@Override public void combats (personvent pe) {System.out.println (pe.getSource () + "il a été exécuté ..."); if (pe.getName (). equals ("zhang san")) {System.out.println (pe.getName () + "Exécutez à la première place ..."); }}}}; P1.AddPersonListener (auditeur); P2.AddPersonShentillener (auditeur); p1.run (); P2.Run (); Personne p3 = nouvelle personne ("li si"); P3.AddPersonListener (new defaultCatListener ()); p3.run (); }}Résultats de la démonstration:
Ce sont les principes de base. Si vous modifiez la sortie de l'événement en l'action dont vous avez besoin, vous pouvez réaliser la fonction que vous souhaitez. Ajoutez un auditeur et vous pouvez appeler la méthode que vous souhaitez appeler avant ou après la méthode d'exécution et effectuer l'action que vous souhaitez faire!
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.