`

java 回调模式 (部分转载,部分原创)

 
阅读更多

“if you call me, i will call back”,说白了,就是有相互依赖关系的两个类之间的互相调用

package callBack;

publicclassContextimplementsA.Callback{

privateAa;

publicvoidbegin(){
System.out.println("begin...");
}

publicvoidend(){
System.out.println("end...");
}

publicContext(){
this.a=newA(this);
}

publicvoiddoSomething(){
this.a.doIt();
}

publicstaticvoidmain(Stringargs[]){
newContext().doSomething();
}
}

package callBack

publicclassA{

privatefinalCallbackcallback;

publicstaticinterfaceCallback{
publicvoidbegin();
publicvoidend();
}
publicA(Callbackcallback){
this.callback=callback;
}
publicvoiddoIt(){
callback.begin();
System.out.println("dosomething...");
callback.end();
}
}

上面的代码模型其原型是出自hibernate里的org.hibernate.jdbc.JDBCContext 和 org.hibernate.jdbc.ConnectionManager两个类,从上面的模型不难看出:Context类实现了A类的Callback接口,在Context类的构造器里将自己注入了A类,在Context类里调用A类的doIt()方法,这时就是:you call me;在doIt()方法体里调用了Context类的begin()和end()方法,这时就是:i call back。Context类 和 A类相互依赖,互相调用
在hibernate的源代码里大量使用了上面的callback回调模型,又如:org.hibernate.jdbc.JDBCContext 和 org.hibernate.impl.SessionImpl等等,可以自己去看源代码,这里不再赘述。

当然上面提到的模型中的两个类也可以写在同一个类里面,定义的Callback接口可以用内部匿名类来实现,比如下面的一个简单的dao实现:

package callBack;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;

public class Dao {
private interface Callback {
Object doIt(Connection conn) throws SQLException;
}
private Object execute(Callback callback) throws SQLException {
Connection conn = openConnection(); // 开启数据库连接
try { return callback.doIt(conn); } // 执行具体操作并返回操作结果
finally { closeConnection(conn); } // 关闭数据库连接
}

public Object sqlQuery(final String sql) throws SQLException {
return execute(
new Callback() {
public Object doIt(Connection conn) throws SQLException {
ResultSet rs=conn.createStatement().executeQuery(sql);
while(rs.next()){
System.out.print(rs.getInt("id")+"\t");
System.out.print(rs.getString("userName")+"\t");
System.out.print(rs.getString("email")+"\t");
System.out.print(rs.getString("passWord")+"\t");
System.out.print(rs.getString("address")+"\t");
System.out.print(rs.getString("sex")+"\t");
System.out.print(rs.getString("work")+"\t");
System.out.println();
}
return rs;
}
}
);
}

public Connection openConnection() throws SQLException {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/blog", "root", "root");
}
public void closeConnection(Connection conn) throws SQLException {
if(conn != null && !conn.isClosed()) {
conn.close();
}
}

public static void main(String[] args){
Dao dao=new Dao();
try{
String sql="select * from user";
Class.forName("com.mysql.jdbc.Driver");
dao.sqlQuery(sql);

}catch(Exception e){
e.printStackTrace();
}
}
}
用这种回调模式方便的把openConnection()和closeConnection()做了切片,从代码中剥离出来,使代码复用性更高,也更简洁



分享到:
评论

相关推荐

    java 回调函数 实现

    在Java编程中,回调函数是一种设计模式,它允许一个对象在另一个对象执行特定操作后接收通知或进行处理。这种机制通常用于事件驱动编程或者异步编程中,使得代码能够响应某些特定事件的发生。在给定的场景中,我们...

    java自定义回调函数

    回调函数允许一个方法在完成特定操作后通知另一个方法,这种设计模式在异步编程和事件处理中尤其常见。在Java中,我们可以使用接口或者匿名内部类来实现回调机制。 首先,我们需要理解什么是回调。回调是一种编程...

    企业微信回调模式建立连接需要的java类和jar包,JAVA

    企业微信回调模式建立连接需要的java类和jar包,JAVA方面的代码, 包含7个java类和一个jar包,企业微信回调模式建立连接需要的java类和jar包,JAVA方面的代码, 包含7个java类和一个jar包

    java实现企业微信回调配置案例

    本案例将详细讲解如何使用Java来实现企业微信的回调配置,并提供相关的工具代码示例。 1. **企业微信API介绍** 企业微信提供了丰富的API接口,包括但不限于用户管理、部门管理、消息推送等。回调配置主要是通过...

    Java回调机制

    总的来说,Java回调机制是理解和掌握Java编程中必不可少的一部分,它帮助我们构建更灵活、可扩展的系统,同时也为处理异步操作和事件驱动的程序设计提供了强大的工具。通过深入理解并熟练运用回调,开发者可以编写出...

    Android JNI多线程编程回调JAVA函数

    本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...

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

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

    java 实现回调代码实例

    Java回调机制是一种编程设计模式,它允许一个对象在完成特定操作后调用另一个对象的方法。在Java中,由于没有像C++那样的函数指针,因此我们利用接口来实现回调功能。下面将详细介绍如何在Java中实现回调机制。 1. ...

    使用Java实现回调函数代码示例callback.zip

    TaskHandler.java文件是回调模式的另一个关键部分,它实现了Callback接口。TaskHandler的实现中定义了当任务成功完成时执行的操作,以及当任务失败时执行的处理。这个类是回调函数被实际调用的地方,展示了如何在...

    Java回调函数与观察者模式实例代码

    Java 回调函数与观察者模式实例代码,主要介绍了 Java 回调函数与观察者模式的实现,分享了相关代码示例。观察者模式是一种软件设计模式,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动...

    JNA 回调 范例 C++异步回调实现

    这几天搞搞JNA,主要是组内...C++部分使用ACE实现了一个线程,线程中调用Java部分的回调函数。 C++使用vc8开发,代码跨平台,不过偷懒,没写makefile, 其中使用了ACE这个库。 Java部分,使用eclipse。jdk1.5版本。

    C回调java几种方法

    "C回调Java方法"是指从C代码中调用Java的方法,这通常通过Java Native Interface(JNI)实现。JNI是Java平台标准的一部分,它提供了一套接口让Java代码能够调用本地(非Java)代码,反之亦然。本文将详细探讨C回调...

    基于Java语言的Android简单回调设计源码

    本项目基于Java语言,在Android平台上设计实现了一个简单的回调机制,源码包含了多种文件类型,覆盖了从配置到资源的各个方面,全面展示了如何在Android项目中应用回调设计模式。 首先,源码包中包含了15个XML配置...

    回调函数实例练习

    回调函数在计算机编程中是一种设计模式,它允许我们定义一个函数,这个函数可以在其他函数执行完成之后被调用。在Java中,回调函数通常通过接口实现,即将接口作为参数传递给另一个方法,当该方法执行完毕后,会通过...

    再谈java回调函数

    【Java回调函数详解】 回调函数在编程中是一个重要的概念,尤其在处理异步操作或事件驱动的编程模型中。回调函数本质上是一种设计模式,允许我们将一个函数(或方法)作为参数传递给另一个函数,以便在特定时机被...

    安卓开发中的回调函数的Demo

    在安卓应用开发中,回调函数是一种常见的编程设计模式,它允许一个对象在完成特定操作时通知另一个对象。这种模式在事件驱动的系统中尤为常见,比如用户点击按钮、网络请求完成或者数据加载完毕等场景。回调函数使得...

    海康SDK警报回调demo

    基于海康摄像头的SDK调用,警报回调的数据读取,这个代码事人脸抓拍摄像头的抓拍图像读取,我这里是转成了np.array数据格式,python3的代码,其他类似警报回调都可以参考

    设计模式Callback介绍与实例

    >回 调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口; >异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方...

    Java设计模式

    Java设计模式

Global site tag (gtag.js) - Google Analytics