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