`

JAVA通过接口来实现CALLBACK

    博客分类:
  • java
阅读更多

在网上看了好多关于java回调的文章,自己总结了一下(个人意见,仅供参考):

JAVA通过接口来实现CALLBACK。  
  例:  
  1.class   A,class   B  
  2.class   A实现接口operate  
  3.class   B拥有一个参数为operate接口类型的函数test(operate   o)  
  4.class   A运行时调用class   B中test函数,以自身传入参数  
  5.class   B已取得A,就可以随时回调A所实现的operate接口中的方法

=========================================================================

接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。

==========================================================================

概括一句:回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。

===========================================================================

借用John D. Mitchell的例子应该比较好理解


在MS-Windows或者X-Window系统的事件驱动模型中,当某些事件发生的时候,开发人员已经熟悉通过传递函数指针来调用处理方法。而在Java的面向对象的模型中,不能支持这种方法,因而看起来好像排除了使用这种比较舒服的机制,但事实并非如此。

Java的接口提供了一种很好的机制来让我们达到和回调相同的效果。这个诀窍就在于定一个简单的接口,在接口之中定义一个我们希望调用的方法。

举个例子来说,假设当一个事件发生的时候,我们想它被通知,那么我们定义一个接口:

public interface InterestingEvent
{

    
// This is just a regular method so it can return something or

    
// take arguments if you like.

    
public void interestingEvent ();

}

这就给我们一个控制实现了该接口的所有类的对象的控制点。因此,我们不需要关心任何和自己相关的其它外界的类型信息。这种方法比C函数更好,因为在C++风格的代码中,需要指定一个数据域来保存对象指针,而Java中这种实现并不需要。

发出事件的类需要对象实现InterestingEvent接口,然后调用接口中的interestingEvent ()方法。

public class EventNotifier
{

    
private InterestingEvent ie;

    
private boolean somethingHappened; 

    
public EventNotifier (InterestingEvent event)
    
{

        
// Save the event object for later use.

        ie 
= event; 

        
// Nothing to report yet.

        somethingHappened 
= false;

    }
 

    
//  

    
public void doWork ()
    
{

        
// Check the predicate, which is set elsewhere.

        
if (somethingHappened)
        
{

            
// Signal the even by invoking the interface's method.

            ie.interestingEvent ();

        }


        
//
    }
 

    
// 

}

在这个例子中,我们使用了somethingHappened这个标志来跟踪是否事件应该被激发。在许多事例中,被调用的方法能够激发interestingEvent()方法才是正确的。

希望收到事件通知的代码必须实现InterestingEvent接口,并且正确的传递自身的引用到事件通知器。

public class CallMe implements InterestingEvent
{

    
private EventNotifier en; 

    
public CallMe ()
    
{

        
// Create the event notifier and pass ourself to it.

        en 
= new EventNotifier (this);

    }
 

    
// Define the actual handler for the event.

    
public void interestingEvent ()
    
{

        
// Wow!  Something really interesting must have occurred!

        
// Do something

    }
 

    
//

}


分享到:
评论

相关推荐

    java CallBack(回调函数)

    简要说明接口回调:即使实现接口类的引用赋值给该接口申明的变量,然后该变量就可以调用接口中的方法了(当接口变量调用接口中的方法的时候,实际上我们处理的是该接口实现类中的相应的函数的实现部分)。

    JAVA_API1.6文档(中文)

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    nodejs调用建行互联网银企被扫支付接口加密及验签Demo+java封装jar包

    nodejs调用java可以通过child_process模块中的spawn()函数实现。 var spawn = require('child_process').spawn;  nodejsJava.encryptccbParam=function(flag,param,pubKey,callback){//必须传入4个参数}  

    java api最新7.0

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    Java 1.6 API 中文 New

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    JavaAPI1.6中文chm文档 part1

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    设计模式Callback介绍与实例

    基本概念 if you call me, i will call back 什么是回调函数 回调函数(callback Function),顾名思义,用于回调的...回调和异步调用的关系非常紧密:使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。

    java jdk-api-1.6 中文 chmd

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    JavaAPI中文chm文档 part2

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    Android JNI多线程编程回调JAVA函数

    通过JNI接口静态注册的native方法去创建线程,同时提供native回调Java的方法。通过这个框架可以去实现线程监听某一个状态,然后回调Java的方法(如发消息去通知顶层,实现显示)

    java面试宝典

    76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private String name; public abstract boolean isStupidName...

    [Java参考文档]

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    [Java参考文档].JDK_API 1.6

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

    java乐器源码-weixinapi:Java实现的微信API接口SDK

    Java实现的微信API接口SDK 注意:拒绝996工作制公司请使用本项目。 开发者 作者: marker 邮箱: 博客: 微信公众号:(欢迎关注支持) Maven 坐标 <groupId>com.wuweibi</groupId> <artifactId>weixinapi ...

    retrofitdemo:通过自定义CallAdapter、Call、CallBack实现请求前、请求结束的接口回调

    通过自定义CallAdapter、Call、CallBack实现请求前、请求结束的接口回调,主要目的是实现请求前打开请求等待对话框,请求结束关闭对话框。使用如下: 定义接口,使用Hcall @GET("getValidatedUsers") Hcall...

    cgilb应用开发详解

    net.sf.cglib.proxy.MethodInterceptor 接口是最通用的回调(callback)类型,它经常被基于代理的 AOP 来实现拦截(intercept)方法的调用。 CGLIB 的优点是可以动态地创建代理,且比 JDK 动态代理方法快多了。...

    JDK_1_6 API

    java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间...

Global site tag (gtag.js) - Google Analytics