Maison  >  Article  >  Java  >  Comprendre le mécanisme de traitement des événements JAVA à partir de zéro

Comprendre le mécanisme de traitement des événements JAVA à partir de zéro

巴扎黑
巴扎黑original
2017-06-23 16:37:251205parcourir

Le mot « événement » a été galvaudé. C'est précisément à cause de l'utilisation abusive des « événements » que de nombreuses personnes ne comprennent pas clairement l'utilisation des événements et suivent simplement le même exemple. En conséquence, après avoir étudié et travaillé pendant de nombreuses années, ils ne savent toujours pas ce qu'est un processeur d'événements. ce qu'est un organisateur d'événement. Donc, si vous avez toujours peur du mot Événement, alors cet article est exactement ce dont vous avez besoin. Expliquons le mécanisme de traitement des événements Java étape par étape, du facile au difficile, du concret à l'abstrait.

1 : Modèle d'observateur

Pour comprendre les événements et la surveillance, nous devons d'abord comprendre le modèle d'observateur.

Qu'est-ce que le mode observateur ? Regardons d'abord une scène familière :

1 : L'enseignant donne des devoirs, notifie les élèves

2 : Les élèves ont observé l'enseignant attribuer des devoirs et ont commencé à le faire ; Les élèves utilisent ce scénario pour expliquer les problèmes de codage, donc le sujet reviendra certainement au code réel à la fin. Plus près de chez nous, dans cette scène, les élèves sont les observateurs et les enseignants sont les observés, mais chacun doit y prêter attention :

L'enseignant, comme l'observé, prend effectivement l'initiative et s'intéresse à J'ai mis en gras le mot « notification » dans l'article car cela semble être une simple notification, mais en fait cela nécessite beaucoup de choses (écrire beaucoup de code).

D'accord, implémentons d'abord le scénario ci-dessus :

Code :

Observateur, étudiantComprendre le mécanisme de traitement des événements JAVA à partir de zéro

package com.zuikc.events;

import java.util.Observable;

classe publique L'étudiant implémente java.util.Observer {

nom de chaîne privée;

public Student(String name){

this.name = name;

}

@Override

public void update(Observable o, Object arg) {
Teacher Teacher = (Professeur) o;
System.out.printf("L'élève %s a observé (en fait a été informé) que %s lui avait assigné un devoir "%s" n", this.name, professor.getName(), arg) ;
}

}


Observateur, enseignant

package com.zuikc.events;

import java .util.*;

classe publique L'enseignant étend java.util.Observable {

private String name;

private List devoirs;

public String getName () {

                                                                                                                                                                           " """""""""""""""

}

public void setHomework(String devoirs) {

System.out.printf("%s devoirs assignés %s n" , this.name, devoirs);
homeworks.add (devoirs);
setChanged();

notifyObservers(homework);


}
}




Client :

package com.zuikc.events;

classe publique Client {


public static void main (String[] args) {

Étudiant étudiant1= nouvel Étudiant("Zhang San");
Étudiant étudiant2 = nouvel Étudiant("李思");

Professeur professeur1 = nouveau Professeur("zuikc") ;

professeur1.addObserver(student1);
professeur1.addObserver(student2);

professeur1.setHomework("Mécanisme d'événement, devoirs du premier jour");

}

}



Beaucoup de débutants ont Illusion, considérant que l'action "d'observation" est active, je pense qu'en termes d'implémentation du code, Reader appelle activement sa propre mise à jour, mais malheureusement, bien sûr pas en termes de code. mise en œuvre, la mise à jour est activement appelée par l'enseignant « observé ». Certaines personnes disent que je n'ai vu que


setChanged();
notifyObservers(homework);

dans Teacher et je ne l'ai pas vu appeler update, donc veuillez consulter sa classe parent Observable, dans la méthode notifyObservers,

for (int i = arrLocal.length-1; i>=0; i--)

((Observer)arrLocal [i]).update(this, arg);

Regardez les résultats :

Comprendre le mécanisme de traitement des événements JAVA à partir de zéro

Notez que dans le code ci-dessus, j'ai directement utilisé la classe Observable et l'interface Observer dans le package java.util. Bien sûr, nous pouvons également écrire ces deux choses vous-même.

2 : Mode observateur de base

Les débutants ne sont pas habitués à utiliser l'API dans java.util dès le début et peuvent trouver cela difficile Si vous ne pouvez pas y toucher, nous écrirons nous-mêmes une version de base du modèle d'observateur. Tout le monde peut le ressentir. Pendant le processus d'écriture, assurez-vous de comparer le diagramme UML et le code de la section précédente, puis réfléchissez en silence. : Il n'y a aucune différence entre eux.

Photo ci-dessus :

Comprendre le mécanisme de traitement des événements JAVA à partir de zéro

Code ci-dessus :

Observateur, interface

package com.zuikc ;

public interface Observer {

void update(Observable o);
}

Pour des observateurs spécifiques, j'en ai écrit deux :

class ConcreteObserver1 implémente Observer {

public void update(Observable o) {
System.out.println("Observateur 1 observé" + o.getClass().getSimpleName( ) + "Un changement s'est produit ");
      System.out.println("Observateur 1 a répondu"); 🎜> public void update(Observable o) {
System.out.println("Observateur 2 observé" + o.getClass(). getSimpleName() + "Changed");
System.out. println("Observateur 2 répondu");

}

}


Observateur


package com.zuikc;

import java.util.ArrayList;

import java.util.List;

classe publique Observable {

List observers = new ArrayList();


public void addObserver(Observer o) {

observers.add(o);

}

public void doSomething() {

System.out.println("Je suis observé, j'ai changé ");

// Notifier activement tous les observateurs
notifyObServers (🎜>}

Public void NotifyobServers () {

for (Observer observer : observers) {
                observer.update(this); package com.zuikc;

public class Client {

public static void main(String[ ] args) {

Observable observable = new Observable();
observable.addObserver( new ConcreteObserver1());
observable.addObserver(new ConcreteObserver2());
observable.doSomething();
}

}

Vous pouvez exécuter le code vous-même et voir ce qui se passe.

Dans le code ci-dessus, nous avons créé une interface et une classe d'observateur. Bien que ce soit un peu plus simple, cela produit l'effet de démonstration. Bien entendu, nous pouvons également copier le code source dans le JDK intact comme le code de nos deux fichiers.

Si vous connaissez déjà bien le code ci-dessus, vous pouvez également étudier la méthode de mise à jour. Dans la première section, nous avons apporté le paramètre arg, mais il n'est pas inclus dans cette version de base. Peu importe, vous pouvez l'apporter si vous le souhaitez, ou ne pas l'apporter si vous ne le souhaitez pas. Le code est la liberté, à condition que vous en compreniez la fonction.




3 : Le but du modèle observateur

La version de base du modèle observateur est trop simple après tout, dans le code de notre première section, on peut résumer :

1 : La classe professeur n'a rien à voir avec la classe élève Il s'appuie uniquement sur l'interface observateur Si un jour, ses devoirs ne sont pas uniquement assignés aux élèves, mais comme. un excellent conférencier, il l'envoie également à toute l'école. Le professeur sert de référence, puis tant que la classe professeur implémente également l'interface observateur, on peut aussi ajouter le professeur à la liste des observateurs du professeur
2 : Le modèle d'observateur sépare l'observateur et la responsabilité observée pour chaque classe, permettant à chaque classe de conserver ses propres fonctions, améliore la réutilisabilité du système

 ;

3 : L'observation semble être un comportement actif, mais en fait l'observateur n'appelle pas activement son propre code métier, au contraire, il est appelé par l'observateur. Par conséquent, le modèle d'observateur a un autre nom, appelé modèle de publication-abonnement, je pense que ce dernier est plus approprié

Le modèle d'observateur a une autre forme, qui est un modèle basé sur les événements, ceux-ci ; Les deux méthodes sont très proches en termes de mécanisme de mise en œuvre.Sur la base de la compréhension du modèle d'observateur, il est très simple de comprendre le pilotage des événements.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn