接口回调的复现

今天讲的内容重点是回调机制,这是java里面动态绑定的又一面貌。
    动态绑定:我们用父类的引用指向子类的对象,Father father = new Son();,内存上,是一个叠加的原理。子类继承于父类,重写父类里面的方法。从而达到我们可以根据传递的子类对象而实现不一样的业务处理。
    java的回调机制的原理,用很有吸引的一个标题讲解,就像是好莱坞原则一样:Don't call me,I will call you.讲的是:应聘者不用找公司方,当公司方需要你这个演员时,会自己找到你的。
编程上来说,一般使用一个库或类时,是程序员去调用事先定义好的API,这个叫Call。有的时候这样不能满足需要,需要程序员注册自己的程序(比如一个对象),然后让事先定义好的API在合适的时候来调用程序员写的方法,这叫Callback。
回调,从字面上我们可以看出,这是一种双向调用模式。被调用方在接口被调用时也会调用对方的接口。
技巧在于:定义一个简单的接口,并在接口中声明我们要调用的方法。
    举例如下所示:
定义的接口:
public interface InterestingEvent {
   public void interestingEvent();
}
实现接口的代码如下:
public class CallMe implements InterestingEvent {
       public CallMe() {
   }

   public void interestingEvent() {
       System.out.println("实现了打印!")
  }
}
public class CallYou implements InterestingEvent {
      public CallYou() {
   }

public void interestingEvent() {
 
     System.out.println("实现了查询!");
}

}
发出事件信号的类必须等待实现了 InterestingEvent 接口的对象,并在适当时候调用 interestingEvent() 方法。
public class EventNotifier {
private InterestingEvent ie;
private boolean somethingHappened ;
public EventNotifier() {
 somethingHappened = true ;
}
public void setInterestingEvent(InterestingEvent ie){
 this.ie = ie ;
}
public void doWork(){
 if(somethingHappened){
  ie.interestingEvent();
 }
}

}
测试:
public class Test {
public static void main(String[] args) {
 CallMe cm = new CallMe();
 CallYou cy = new CallYou();
 EventNotifier en = new EventNotifier();

 en.setInterestingEvent(cm);
 en.doWork();
 en.setInterestingEvent(cy);
 en.doWork();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值