java中接口回调作用在哪里,看半天不知道到它有什么用,求大神仔细说下。
比如A类中有B类,B类中又要更新A类信息的时候就有用了,或者说异步的时候。
假定我们希望在某个事件发生时得到通知。我们可以定义一个接口:
InterestingEvent.java
package org.zj.sample;
public interface InterestingEvent {
public void interestingEvent ();
}
这使得我们可以控制实现该接口的类的任何对象。因此,我们不必关心任何外部类型信息。
发出事件信号的类必须等待实现了 InterestingEvent 接口的对象,并在适当时候调用 interestingEvent() 方法。
EventNotifier.java
package org.zj.sample;
public class EventNotifier {
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier(InterestingEvent event) {
ie = event; // 保存事件对象以备后用。
somethingHappened = false; // 还没有要报告的事件。
}
public void doWork() {
if (somethingHappened) { // 检查设置的谓词。
ie.interestingEvent();// 通过调用接口的这个方法发出事件信号。
}
}
public void setHappened(){//设置谓词。
somethingHappened=true;
}
}
在上例中,使用 somethingHappened 谓词来跟踪是否应触发事件。希望接收事件通知的代码必须实现 InterestingEvent 接口,并将自身引用传递给事件通知程序。
CallMe.java
package org.zj.sample;
public class CallMe implements InterestingEvent {
@SuppressWarnings("unused")
private EventNotifier en;
public CallMe() {
// 注意 EventNotifier (InterestingEvent event),应该传递一个接口类型。
// 而下面将this,即实现了InterestingEvent接口的CallMe实例传递给
//EventNotifier。也就是所谓的接口回调了。
en = new EventNotifier(this); // 创建事件通知程序,并将自身引用传递给它。
}
// 为事件定义实际的处理程序。
public void interestingEvent() {
System.out.println("Call me Hello.");
}
}
下面写个测试类。
Test.java
package org.zj.sample;
public class Test {
public static void main(String[] args) {
EventNotifier en=new EventNotifier(new CallMe());
en.setHappened();
en.doWork();
}
}
存在即合理,很多java设计模式都要使用接口回调
初学者先知道有这么回事,一开始也不会经常用到。以后接触设计模式什么的你会有更深的理解
android里好像是大量采用回调的...