Maison >Java >javaDidacticiel >Exemple de code de rappel d'implémentation Java

Exemple de code de rappel d'implémentation Java

高洛峰
高洛峰original
2017-01-24 13:30:251292parcourir

Implémentation JAVA du rappel

Les développeurs familiers avec les modèles de conception basés sur les événements MS-Windows et X Windows transmettent généralement un pointeur vers une méthode vers la source de l'événement et l'appellent lorsqu'un événement se produit . Cette méthode (également appelée « rappel »). Le modèle orienté objet de Java ne prend actuellement pas en charge les pointeurs de méthode et ne semble pas pouvoir utiliser ce mécanisme pratique.

Java prend en charge l'interface, et le même rappel peut être obtenu via l'interface. L'astuce consiste à définir une interface simple et à déclarer une méthode que vous souhaitez rappeler.

Par exemple, en supposant que nous serons avertis lorsqu'un certain événement se produit, nous pouvons définir une interface :

public interface InterestingEvent {
 // 这只是一个普通的方法,可以接收参数、也可以返回值
 public void interestingEvent();
}

De cette façon, nous en avons une qui implémente ceci La poignée de l'objet de classe d'interface.

Lorsqu'un événement se produit, l'objet qui implémente l'interface InterestingEvent doit être notifié et la méthode interestingEvent() doit être appelée.

class EventNotifier {
 private InterestingEvent ie;
 private boolean somethingHappened;
 
 public EventNotifier(InterestingEvent event) {
  ie = event;
  somethingHappened = false;
  }
public void doWork() {<br>        if (somethingHappened) {<br>            // 事件发生时,通过调用接口的这个方法来通知<br>            ie.interestingEvent();<br>        }        <br>    }<br>}

Dans cet exemple, SomethingHappened est utilisé pour marquer si l'événement se produit.

Les classes qui souhaitent recevoir des notifications d'événements doivent implémenter l'interface InterestingEvent et transmettre leur propre référence au notificateur d'événement.

public class CallMe implements InterestingEvent {
 private EventNotifier en;
 
 public CallMe() {
  // 新建一个事件通知者对象,并把自己传递给它
  en = new EventNotifier(this);
 }
 
 // 实现事件发生时,实际处理事件的方法
 public void interestingEvent() {
  // 这个事件发生了,进行处理
 }
}

Ce qui précède est un exemple très simple pour illustrer l'implémentation des rappels en Java.

Bien sûr, vous pouvez également enregistrer plusieurs objets intéressés par cet événement en vous inscrivant à la classe de gestion d'événements ou de notification d'événements.

1. Définissez une interface InterestingEvent, et la méthode de rappel ninterestingEvent(String event) reçoit simplement un paramètre String.

interface InterestingEvent {
 public void interestingEvent(String event);
}

2. Implémentez l'interface InterestingEvent, classe de traitement d'événements

class CallMe implements InterestingEvent {
 private String name;
 public CallMe(String name){
  this.name = name;
 }
 public void interestingEvent(String event) {
  System.out.println(name + ":[" +event + "] happened");
 }
}

3. , ou notificateur d'événement

class EventNotifier {
 private List<CallMe> callMes = new ArrayList<CallMe>();
  
 public void regist(CallMe callMe){
  callMes.add(callMe);
 }
  
 public void doWork(){
  for(CallMe callMe: callMes) {
   callMe.interestingEvent("sample event");
  }
 }
}

4. Testez

public class CallMeTest {
 public static void main(String[] args) {
  EventNotifier ren = new EventNotifier();
  CallMe a = new CallMe("CallMe A");
  CallMe b = new CallMe("CallMe B");
 
  // regiest
  ren.regist(a);
  ren.regist(b);
   
  // test
  ren.doWork(); 
 }
}

Le ci-dessus est une introduction au mécanisme de rappel Java. Les étudiants dans le besoin peuvent s'y référer.

Pour plus d'articles sur les exemples de codes de rappel d'implémentation Java, veuillez faire attention au site Web PHP 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