king of world解释

来源:互联网 发布:linux vs qt 编辑:程序博客网 时间:2024/05/21 09:47

编程思想基本概念之回调(Callback)

标签: callback编程pascalclassinterface语言
 3384人阅读 评论(0) 收藏 举报
 分类:

在软件模块调用中,主要有三种机制:同步调用,异步调用和回调。

同步调用是调用方(A)call被调用方(B)的接口,并等待B处理完给出一个回执后A才继续执行,这期间是“阻塞”的。

异步调用是调用方(A)call被调用方(B)的接口后,不等待B执行完,且B在被调用后会直接回执A。

回调是调用方(A)call被调用方(B)时,B也回调(callback)被调用方,双方互调接口,只不过call动作是由A发起的。

同步调用是最简单的,异步调用一般是在回调的基础上实现的。所以了解“回调”的机制是至关重要的。各位朋友请看下面的代码。

(注:以下示例用Java语言实现,在C,C++或Pascal等语言中也有相应的方式实现。)


[java] view plain copy
 print?
  1. package callbackexample;  
  2. public interface ICallBack  
  3. {  
  4.     //需要回调的方法  
  5.     public void postExec();  
  6. }  


上面就是一个接口类(抽象类,abstract class),他需要在调用方处被实现为一个匿名类。其中的postExec就是回调方法。


[java] view plain copy
 print?
  1. package callbackexample;  
  2. package callbackexample;  
  3. public class FooBar   
  4. {  
  5.     //组合聚合原则   
  6.     private ICallBack callBack;  
  7.     public void setCallBack(ICallBack callBack)  
  8.     {  
  9.         this.callBack = callBack;  
  10.         doSth();  
  11.     }  
  12.     public void doSth()  
  13.     {  
  14.         callBack.postExec();   
  15.     }  
  16. }  


上面是一个被调用的类,其中的setCallBack方法是被调用的方法。


[java] view plain copy
 print?
  1. package callbackexample;  
  2. //第二个类在测试类里面,是一个匿名类:  
  3. package callbackexample;  
  4. public class Test  
  5. {  
  6.     public static void main(String[] args)  
  7.     {  
  8.         FooBar foo = new FooBar();  
  9.         foo.setCallBack(new ICallBack(){  
  10.             public void postExec()  
  11.             {  
  12.                 System.out.println("在Test类中实现但不能被Test的对象引用,而由FooBar对象调用");  
  13.             }  
  14.         });  
  15.     }  
  16. }  


上面的Test就是一个用于测试的调用者类,它通过main方法中实例化一个FooBar,并用实现的ICallBack的匿名类作为参数传递给FooBar的被调用方法setCallBack,而在这个虚拟方法中,FooBar调用了匿名类的匿名类的postExec方法的动作,这个动作就是回调(Callback)。

0 0
原创粉丝点击