`

关于回调

 
阅读更多

本文主要是自己对于回调的一些总结记录,如果有错误欢迎大家指正。

程序从调用方式上可以分为三类:同步调用、回调和异步调用(另开辟线程调用),本文主要讨论回调。

个人感觉,回调很像设计模式中的strategy策略模式,原因如下:

首先,定义一个回调接口:

public interface CallBack {
	public void exec();
}

定义一个Client类实现该接口:

public class Client implements CallBack{
	public void exec() {
		System.out.println("Client execute...");
	}
}

Server类持有Callback接口:

public class Server {
	private CallBack callback;
	public void setCallBack(CallBack callback){
		this.callback=callback;
	}
	public void post(){
		callback.exec();
	}
}

使用方式:

CallBack callback=new Client();
server.setCallBack(callback);
//服务器端运行...
System.out.println("Server is running...");
System.out.println("Server running finish,call Client...");
server.post();//call

其中,CallBack接口类似于strategy中定义的如何调用算法的接口,Client类似于strategy中的算法实现类,Server类似于strategy中的策略使用类。

也就是说,上面这个回调例子其实就是只有一个算法的strategy模式的实现,不知道这么说是否合理。

另一种回调方式是通过匿名内部类:

//通过匿名内部类的回调
Server server=new Server();
server.setCallBack(new CallBack(){//注册客户端
	public void exec(){
		System.out.println("No Name Client execute......");
	}
});
//服务器端运行...
System.out.println("Server is running...");
System.out.println("Server running finish,call Client...");
server.post();//call

其中,new CallBack(){...}即声明了一个实现CallBack接口的匿名内部类(以替代Client类实现),并且实现了exec方法。

在JDK类库中经常看到一些用于事件监听的Listener接口,大部分使用时都是这种匿名内部类方式(比如Swing和AWT类库中很多图形界面上的事件监听)。

 

分享到:
评论

相关推荐

    关于回调函数的总结

    关于回调函数很好的总结,对回调函数的理解会有帮助。

    Delphi中制作DLL中回调函数的应用

    七、关于回调Funciton 你可以把Callback函数看作是一种特殊的消息响应函数,一般来说我们不会自己调用这种函数, 而是有某些系统函数调用,而且不需要向后传递消息。 只要象C/C++这样支持函数指针的语言都 有回调...

    回调函数实例练习

    这个程序是我在理解回调函数时编写的一个Demo. 里面包含了三部分: 1.回调函数 2.观察者模式 3.代理模式 配套有CSDN博文:关于回调函数的理解,以及观察者模式,代理模式

    回调函数Callback Function

    关于回调函数的基本概念和使用技巧. 个人觉得不错. 当然了. 网上可以搜到更好的,

    回调函数定时器使用手册

    里面关于VC中回调函数的使用,定时器的使用,这是我在项目中的总结

    浅谈JAVA回调机制1

    当然,即使开头的关于回调的英文概念被翻译成了中文,不少人仍觉得难以理解简单来说,回调就是 A 类调用 B 类中的 X 方法,B 类中的 X 方法执行过程中反过来

    关于delphi 7的DLL使用回调函数

    主程序用回调函数作为参数,调用DLL窗口,在DLL窗口中使用回调函数,反写主程序信息,实例中用DLL的编辑框反写主程序编辑框的内容

    aidl回调与传参

    ###Android的跨进程通信---------aidl 做android也有一段时间了,一直没有在博客中去做过这样的总结,刚好这段...以前只是单纯的绑定,基本上没有用到server和Client之间的回调,以及也没有用到过于复杂对象的序列化。

    通过回调执行其他Shellcode-C/C++开发

    替代代码执行这种方法的受欢迎程度超出了预期,因此我只是想对alfarom256进行喊叫,以便向我介绍cal替代代码执行这种方法的受欢迎程度超过了预期,因此我只是想对alfarom256进行喊叫,以通知我关于回调函数,并向我...

    关于Java线程间通信-回调.docx

    关于Java线程间通信-回调

    easyui message.alert回调方法(easyui1.4)

    自己整理写的关于message.alert回调,不喜欢的勿扰~!

    关于javascript 回调函数中变量作用域的讨论

    关于回调函数中变量作用域的讨论精品推荐,大家可以参考下。

    python学习之hook钩子的原理和使用

    之前有转一篇关于回调函数的文章 钩子函数、注册函数、回调函数,他们的概念其实是一样的。 钩子函数,顾名思义,就是把我们自己实现的hook函数在某一时刻挂接到目标挂载点上。 1. hook函数,就是我们自己实现的...

    Android 关于一个接口回调的Demo

    这里写的是一个Android接口回调的Demo,如果对接口回调不太理解、或者不太会用的话,相信看完这个简单的demo,便会解决你的问题

    C++回调函数

    关于C++回调函数的一些解释以及相关的实例,推荐给希望对回调函数作初步了解的读者。

    okhttp二次回调封装Demo

    本文写的主要是一个关于okhttp的网络框架的简繁封装,提供给新手朋友,欢迎关注我的博客

    Java接口回调一般用法

    Java接口回调一般用法:实现接口实际上和继承抽象类类似,只不过继承是...  接口的一大作用是实现回调,回调分同步回调和异步回调,区别是异步回调使用了多线程技术,当回调中有耗时操作时,需要使用异步回调。  以

    WCF 回调操作示例

    C#实现的一个关于WCF回调的程序,包括服务端,宿主,以及客户端调用。很全面的一个WCF程序,希望能帮助有需要的同学

    详解关于微信setData回调函数中的坑

    主要介绍了详解关于微信setData回调函数中的坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics