Heim  >  Artikel  >  Java  >  Beispiel für einen Callback-Code für die Java-Implementierung

Beispiel für einen Callback-Code für die Java-Implementierung

高洛峰
高洛峰Original
2017-01-24 13:30:251257Durchsuche

JAVA-Implementierung von Rückrufen

Entwickler, die mit ereignisgesteuerten Entwurfsmustern von MS-Windows und X Windows vertraut sind, übergeben normalerweise einen Methodenzeiger auf die Ereignisquelle und rufen ihn auf, wenn ein Ereignis auftritt Methode (auch „Callback“ genannt). Das objektorientierte Modell von Java unterstützt derzeit keine Methodenzeiger und scheint diesen praktischen Mechanismus nicht nutzen zu können.

Java unterstützt die Schnittstelle, und der gleiche Rückruf kann über die Schnittstelle erreicht werden. Der Trick besteht darin, eine einfache Schnittstelle zu definieren und eine Methode zu deklarieren, die Sie zurückrufen möchten.

Angenommen, wir werden beispielsweise benachrichtigt, wenn ein bestimmtes Ereignis eintritt, können wir eine Schnittstelle definieren:

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

Auf diese Weise haben wir jede, die implementiert dies Der Griff des Schnittstellenklassenobjekts.

Wenn ein Ereignis auftritt, muss das Objekt, das die InterestingEvent-Schnittstelle implementiert, benachrichtigt und die interessanteEvent()-Methode aufgerufen werden.

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>}

In diesem Beispiel wird SomethingHappened verwendet, um zu markieren, ob das Ereignis eintritt.

Klassen, die Ereignisbenachrichtigungen erhalten möchten, müssen die InterestingEvent-Schnittstelle implementieren und ihre eigene Referenz an den Ereignisbenachrichtiger übergeben.

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

Das Obige ist ein sehr einfaches Beispiel, um die Implementierung von Rückrufen in Java zu veranschaulichen.

Selbstverständlich können Sie auch mehrere an dieser Veranstaltung interessierte Objekte über die Anmeldung in der Klasse Veranstaltungsmanagement oder Veranstaltungsmelder anmelden.

1. Definieren Sie eine Schnittstelle InterestingEvent, und die Rückrufmethode ninterestingEvent(String event) empfängt einfach einen String-Parameter.

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

2. Implementieren Sie die InterestingEvent-Schnittstelle, Ereignisverarbeitungsklasse

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 , oder Ereignisbenachrichtigung

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. Testen Sie

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(); 
 }
}

Die Oben finden Sie eine Einführung in den Java-Rückrufmechanismus.

Weitere Artikel zu Java-Implementierungs-Callback-Code-Beispielen finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn