对回调的理解

 回调函数原本是C++中的概念,允许底层程序调用高层定义的某个函数块。


    Java引入了回调函数,实践证明回调手段具有广泛的用途。


    所谓回调,即客户端Client条用了服务端Server中的方法execS,然后Server在接下来的某个时候调用了Client的方法execC,这个过程就叫做回调。对于Client来说,方法execC就是回调函数。


例如Win32下的窗口过程函数就是一个典型的回调函数。一般说来,Client不会自己调用execC,Client提供execC的目的就是让Server来调用它,而且是Client不得不提供。由于Server并不知道Client提供的execC姓甚名谁,所以Server会约定execC的接口规范(函数原型),然后由Client提前通过Server的一个函数Register告诉Server自己将要使用execC函数,这个过程称为回调函数的注册,Register称为注册函数。Web Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。

<span style="font-family:SimSun;">/**
 * 客户端函数接口规范
 */
public interface CallBackInterface {

    public void execC();

}


/**
 * 客户端实现了回调接口(按照回调接口规范,定义回调方法)
 */
public class Client implements CallBackInterface{

    public Client() {

    }

    @Override
    public void execC() {
        System.out.println("回调");
    }
}


/**
 * 服务器端
 */

public class Server {

    CallBackInterface callBackInterface;

    public Server() {

    }

    /**
     * 注册函数,告诉服务器端要调用客户端的那个方法。
     * @param callBackInterface     客户端函数接口规范
     */
    public void register(CallBackInterface callBackInterface) {
        this.callBackInterface = callBackInterface;
    }

    /**
     * 提供给客户端调用的方法。
     */
    public void execS(){
        callBackInterface.execC();
    }

}


//客户端测试类,因为是在客户端(client)调用的服务器端(server)
public class ClientTest {

    public static void main(String[] args){
        Client client = new Client();//创建一个要回调的客户端对象

        Server server = new Server();//创建一个服务器端对象
        server.register(client);//服务器端的注册函数
        server.execS();
    }

}</span><span style="font-family: 楷体_GB2312;">

</span>

上面是我对回调的一些理解,希望对大家有所帮助,欢迎拍砖。嘿嘿


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值