Java回调机制初探

一直以来,对于回调机制都颇多好奇,今天将所学的Java的回调机制做一个简单总结,温故而知新吧。

一般来说,参与回调过程的参与者有四种:调用者、执行者、回调函数、回调函数约束接口。

1)调用者:指发起调用的部分,比如一个APP调用百度地图的接口,一段代码调用一个Jar中提供的功能。

2)执行者:执行者也叫任务执行者,主要被调用者调用,完成具体的某项工作。

3)回调函数:特指调用者和执行者约定的代码部分,在执行者完成任务之后,调用该部分代码。例如Jquery和      Ajax组合使用的回调函数。

        4)回调函数约束接口:主要是为了屏蔽多个调用者的差异性,在调用回调函数时,不必区分不同的调用者,只需要调用接口中已实现的方法即可。Java的动态类别识别机制会自动调用调用者的回调函数。

    下图反应了四者之间的关系。

     

   从图中可以看出,一般调用者和执行者约定一个模块(这个模块通常利用接口进行约束),在执行者成功完成  任务之后,执行该模块。

    闲话不多说,程序猿还是要用代码来表达。

    本例是这样一种逻辑:有两种调用者Caller1和Caller2,他们都存在一个计算两个数加和的需求,如果每个调用者都实现这一功能,会使得代码变得重复臃肿。于是,本着能甩锅就甩锅的原则,他们找到了一个人JobWorker,这个人刚好能做加法(支持double型加法)。原本Caller1和Caller2都需要各自完成的功能,现在可以都由JobWorker完成了。(JobWorker:宝宝心里苦,宝宝不说。。。)

    Caller1内部实现

   

Caller2内部实现

   

    可以看出,Caller1和Caller2在执行加和任务时,都是调用cllMethod方法,然后在其中调用JobWorker的doJob方法来具体完成任务。

              现在来看JobWorker的实现。

              

               如上图所示,JobWorker的工作比较简单,就是做加法。然后在得出结果之后,调用与调用者约定好的回调函数callBackSuccessMethod方法。

              为了屏蔽不同的调用者的类型,这里在每一个调用者内部实现了新的类,由该类各自实现WorkerInterface中约定的回调方法。

              WorkerInterface如下图。

              

             Caller1实现接口的情况如下图。

             

             Caller2实现接口情况。

             

            这里两种调用者只是打印出了执行信息,更复杂的功能如网络网络通信功能、数据库访问等此处没有做演示。

            接下来进行测试。

            

            执行结果如下图。

             

            总结:创建了两种调用者Caller1和Caller2,分别调用JobWorker的doJob方法完成具体的任务。同时Caller1和Caller2各自实现了WorkerInterface接口,通过接口屏蔽了两种不同的调用者类型。同时两者调用者还各自实现了自己回调方法。例子比较简单,但是差不多是这么个原理。后期还可以继续加入比较复杂的设计模式。

           待完善和思考:如果被调用者JobWorker是单例模式,又该如何进行Synchronized控制?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值