Java回调函数深入理解
今天在看java编程思想的时候看到回调函数这个问题,在这里总结一下自己对回调函数的理解加深一下印象。
回调函数,简单的从实际运用来给个定义啊。就是客户端调用服务起执行一个函数,当服务器端执行完成之后反过来调用客户端的函数。就是这样一个简单的过程。相信有过前端编程经验的人都知道这个概念,比如ajax进行异步调用。
今天我们举一个例子来说明回调函数的使用方法,我们现在生活很方便,充值话费可以直接在支付宝或者是微信上面进行,我们可以简单的使用回调函数的方式来模拟这个过程是如何实现的。我们简答介绍一下这个过程,首先客户端微信调用服务器端的接口进行充值操作,但是服务器端需要完成的内容就比较多了,比如:银行完成转账,运营商进行充值等,所以这个过程就是一个异步的过程。我们完成微信充值之后会收到充值成功的界面,但是实际上充值并未成功。这里我们假设10086给我们发送的信息也是微信充值后台做的,代表着充值完成(实际上这是运营商做的)。
思路如下: 首先客户端需要调用服务器端进行充值的操作,这个过程中客户端会提供充值的金额和充值的账户。
服务器端接受到请求之后会进行充值,在这个过程完成之后 服务器端需要知道应该告诉谁充值过程完成了,也就是需要给谁回调信息。但是服务不光提供给指定的用户,所以这里需要对客户端进行抽象。
服务器端完成这个操作之后回调客户端的信息即可。
代码如下:代码中有详细的注释 ,如有不当请大家指正。谢谢。
统一的接口:
/**
* 完成充值后回调函数需要执行的内容
* @author libo
*/
public interface ServerInterface {
public void sendMessage(int amount,String account);
}
客户端:
/**
*/
public class WechatClient implements ServerInterface{
private int amount;
private String account;
@Override
public void sendMessage(int amount, String account) {
// TODO Auto-generated method stub
System.out.println("客户:"+account+"完成账户充值,金额:"+amount);
}
//调用服务器端进行充值
public void forRecharge(){
System.out.println("开始调用服务器端进行充值");
new WechatServer().recharge(amount, account, this);
}
public WechatClient(int amount,String account) {
this.amount = amount;
this.account = account;
}
}
服务器端:
/**
* 服务器端需要完成客户端的调用
* 并且进行回调 注意这里回调就是指的短信提示
* 并且服务器端需要提供制定的回调方法,这就意味着所有的客户端都需要实现定义的接口
* @author libo
*/
public class WechatServer {
@SuppressWarnings("static-access")
public void recharge(int amount,String account,ServerInterface wechatClient){
System.out.println("服务器端开始进行充值操作");
try {
Thread.currentThread().sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("充值操作完成");
//充值操作完成之后需要调用客户端的回调函数通知客户端
wechatClient.sendMessage(amount, account);
}
}
主函数:
public class Main {
public static void main(String[] args) {
int amount = 100;
String account = "123123";
WechatClient wechatClient = new WechatClient(amount, account);
wechatClient.forRecharge();
}
}
运行结果:
开始调用服务器端进行充值
服务器端开始进行充值操作
充值操作完成
客户:123123完成账户充值,金额:100