`

关于回调

 
阅读更多

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

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

个人感觉,回调很像设计模式中的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类库中很多图形界面上的事件监听)。

 

分享到:
评论

相关推荐

    完整版模块_回调函数.rar

    这个"完整版模块_回调函数.rar"压缩包文件很可能包含了一整套关于回调函数的教程、示例代码或者实战项目,旨在帮助学习者深入理解和掌握回调函数的使用。 回调函数,简单来说,就是一个被作为参数传递给另一个函数...

    串口屏LUA例程-常用的回调函数使用说明V1.0.pdf

    本文档主要介绍了在大彩物联型串口屏上使用LUA脚本进行编程时,涉及的一些核心概念是关于回调函数的使用方法以及编程注意事项。大彩LUA脚本API中提供了一系列的回调函数,这些函数在特定事件发生时被自动调用,可以...

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

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

    解决了只能设置一个网页授权回调域名的问题

    在IT行业中,网页授权回调域名(OAuth ...总的来说,理解和解决关于回调域名的问题是提升应用安全性和可扩展性的重要一步。通过适应性的策略和有效的技术实施,开发者可以更好地应对多环境、多团队和合规性的挑战。

    回调函数机制

    关于回调函数的具体实现,我们在文档中看到了一个查找链表中特定值的函数Search_List的例子。在这个例子中,Search_List函数通过一个比较函数指针compare作为参数,允许用户自定义如何比较链表中节点的值。这样,...

    delphi 回调函数示例

    在 Delphi 编程中,回调函数是一种设计模式,它允许你将函数或方法作为参数传递给另一个函数,以便在特定时刻被...以上就是关于 Delphi 回调函数的简要介绍和应用示例,希望对你在 Delphi 编程中使用回调函数有所帮助。

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

    本文将深入探讨如何在DLL中使用回调函数,以及如何通过回调函数实现主程序与DLL之间的通信,特别是在这个例子中,DLL窗口如何反写主程序的信息。 首先,了解回调函数的基本概念。回调函数是一种将函数指针作为参数...

    android开发回调使用.zip

    在这个"android开发回调使用.zip"文件中,我们可以预期包含的是关于如何在Android应用程序中有效地使用回调的教程或代码示例。 首先,我们要理解什么是回调。在编程中,回调是一种设计模式,它允许一个函数或方法在...

    c++调用dll,实现消息回调

    以上就是关于C++调用DLL并实现消息回调的核心概念和步骤。在实际开发中,还需要考虑错误处理、内存管理以及跨平台兼容性等问题。正确理解和运用这些知识,可以帮助我们有效地利用DLL来扩展和优化C++应用程序。

    海康威视sdk二次开发基于springboot报警回调

    在本文中,我们将深入探讨如何在SpringBoot框架中进行海康威视SDK的二次开发,特别是关于报警回调功能。海康威视是全球知名的安防设备供应商,其SDK为开发者提供了丰富的功能,允许我们与监控设备进行高效交互。而...

    Qt使用回调函数方(callback)

    可能包含了具体的信号槽连接示例,而`mainwindow.ui`则是Qt Designer生成的用户界面文件,`callback.pro`和`callback.pro.user`则是项目配置文件,它们共同构成了一个关于Qt回调函数使用的实例项目。

    DLL 回调函数 + Demo示例程序,VS2017 x64

    本资源"DLL 回调函数 + Demo示例程序,VS2017 x64"提供了在Visual Studio 2017 64位环境下关于DLL回调函数的实例,确保在Debug和Release模式下都能正常运行。 首先,我们需要理解DLL是什么。DLL是动态链接库,它是...

    移动demo处理回调

    以上就是关于“移动demo处理回调”所涉及的一些核心知识点,这些技术对于构建高效、用户体验良好的移动应用至关重要。通过理解并熟练应用这些概念,开发者能够更好地处理数据交互和用户反馈,提升应用的性能和用户...

    嵌入式程序设计回调函数模型

    在"CallBackFun2015-12-31"这个文件中,很可能包含了关于如何在实际项目中实现回调函数模型的示例代码、教程或者案例研究,帮助开发者更好地理解和应用这种编程模式。深入研究这些资料,可以进一步提升在嵌入式程序...

    PHP微信H5支付完整代码(包含回调后台代码),改好商户资料和您回调地址即可使用

    4. **回调地址**:回调地址(notify_url)是微信支付系统在用户完成支付后向你的服务器发送支付结果通知的URL。你需要确保这个地址能够正常访问,并且代码能正确处理这些通知。 5. **回调代码**:这部分代码通常...

    海康回调解码例子

    【海康回调解码例子】是一个关于如何使用海康威视(Hikvision)的SDK进行视频流解码并处理解码后的YUV数据的实践示例。在这个项目中,开发者可以学习到如何集成和调用海康提供的SDK库,如DsSdk.dll、PlayCtrl.dll、...

    js回调函数示例

    在给定的文件`aa.html`中,可能包含一个关于JavaScript回调函数的实际示例,比如一个按钮点击事件的处理程序,或者一个使用`setTimeout`的计时器。通过查看和分析这个文件,你可以进一步了解回调函数在实际项目中的...

    RecallBackDemo(回调函数实现简单计时器)

    回调函数在编程中是一种设计模式,它允许我们将一个函数作为参数传递给另一个函数,以便在特定事件发生或操作完成后调用。回调函数的概念是异步编程的基础,尤其是在那些需要等待某些操作完成(如网络请求、定时任务...

    linuxC语言函数指针回调函数教程

    通过阅读《C回调函数+.doc》和《轻松了解C语言回调函数.doc》,你可以获取更多关于函数指针和回调函数的详细解释,包括它们的工作原理、最佳实践以及可能遇到的问题。这些文档应该会涵盖如何定义和使用函数指针,...

Global site tag (gtag.js) - Google Analytics