`
gaoke
  • 浏览: 82920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 回调机制原理及示例

 
阅读更多

今天讲的内容重点是回调机制,这是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();  //待回调用的对象1
 CallYou cy = new CallYou(); //待回调用的对象2
 EventNotifier en = new EventNotifier(); //回调事件主体对象,此例在构造函数阶段进行事件触发标识
 en.setInterestingEvent(cm); //将待回调对象1设置到主体方法内
 en.doWork(); //当执行主体对象的方式时,检测标识是否为真,如果为真,则同时调用了待回调对象1的实现//接口预先定义的方法
 en.setInterestingEvent(cy);//将待回调对象2设置到主体方法内
 en.doWork();//当执行主体对象的方式时,检测标识是否为真,如果为真,则同时调用了待回调对象1的实现//接口预先定义的方法
}
}

 

分享到:
评论

相关推荐

    Java开发技术大全 电子版

    4.10.3抽象方法与回调函数171 4.11最终类与最终方法173 4.12接口与多重继承174 4.12.1接口的定义174 4.12.2接口的继承175 4.12.3接口的实现177 4.13内部类179 4.13.1内部类的定义179 4.13.2内部类访问外部类...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.8.1 实体的生命周期与回调事件 444 10.8.2 使用专门的监听器实现回调 448 10.8.3 为全部实体配置默认监听器 450 10.8.4 排除监听器 452 10.9 本章小结 455 第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 ...

    精通并发与 netty 视频教程(2018)视频教程

    20_通过Apache Thrift实现Java与Python的RPC调用 21_gRPC深入详解 22_gRPC实践 23_Gradle Wrapper在Gradle项目构建中的最佳实践 24_gRPC整合Gradle与代码生成 25_gRPC通信示例与JVM回调钩子 26_gRPC服务器流式调用...

    精通并发与netty视频教程(2018)视频教程

    25_gRPC通信示例与JVM回调钩子 26_gRPC服务器流式调用实现 27_gRPC双向流式数据通信详解 28_gRPC与Gradle流畅整合及问题解决的完整过程与思考 29_Gradle插件问题解决方案与Nodejs环境搭建 30_通过gRPC实现Java与...

    精通并发与netty 无加密视频

    第25讲:gRPC通信示例与JVM回调钩子 第26讲:gRPC服务器流式调用实现 第27讲:gRPC双向流式数据通信详解 第28讲:gRPC与Gradle流畅整合及问题解决的完整过程与思考 第29讲:Gradle插件问题解决方案与Nodejs环境...

    Java学习笔记-个人整理的

    {7.2}回调模式与FileFilter}{104}{section.7.2} {7.3}\ttfamily RandomAccessFile}{106}{section.7.3} {7.4}基本类型数据序列化}{108}{section.7.4} {7.5}String的序列化}{109}{section.7.5} {7.6}InputStream...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器...

    javaSE代码实例

    9.6 接口与回调 170 9.7 instanceof的使用 172 9.7.1 基本语法与使用 172 9.7.2 不允许进行测试的情况 174 9.8 小结 175 第10章 构造器——对象制造的工厂 176 10.1 基础知识 176 10.1.1 编写构造器...

    微信公众平台应用开发:方法、技巧与案例.(机械工业.柳峰)

     6.3.1 配置网页授权回调域名 135  6.3.2 网页授权流程 135  6.3.3 方法封装 139  6.3.4 案例:通过网页授权获取用户信息 145  6.4 生成带参数二维码 149  6.4.1 创建临时二维码 149  6.4.2 创建永久...

    Spring 2.0 开发参考手册

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    Spring中文帮助文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    Spring API

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    asp.net知识库

    Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0...

    spring chm文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

Global site tag (gtag.js) - Google Analytics